admin管理员组

文章数量:1531474

2023年12月27日发(作者:)

activex:

根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。

本文结合目前Internet(WEB)技术发展动向,简略介绍了Microsoft提出的ActiveX技术的内容,阐述了ActiveX技术与WEB站点建设和桌面程序开发的关系,以及利用Visual C++和Visual Basic开发ActiveX部件的步骤和方法,并给出了在WEB网页中使用ActiveX部件的例子。

1. ActiveX概要

1.1. ActiveX的定义

ActiveX是Microsoft提出的一组使用COM(Component Object Model,部件对象模型)使得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序。

1.2. ActiveX的内容

ActiveX既包含服务器端技术,也包含客户端技术。其主要内容是:

* ActiveX控制(ActiveX Control);用于向WEB页面、Microsoft Word等支持ActiveX的容器(Container)中插入COM对象。

* ActiveX文档(ActiveX Document);用于在WEB Browser或者其它支持ActiveX的容器中浏览复合文档(非HTML文档),例如Microsoft Word文档,Microsoft Excel文档或者用户自定义的文档等。

* ActiveX脚本描述(ActiveX Scripting);用于从客户端或者服务器端操纵ActiveX控制和Java程序,传递数据,协调它们之间的操作。

* ActiveX服务器框架(ActiveX Server Framework);提供了一系列针对WEB服务器应用程序设计各个方面的函数及其封装类,诸如服务器过滤器、HTML数据流控制等。

* 在Internet Explorer中内置Java虚拟机(Java Virtual Machine),从而使Java Applet能够在Internet Explorer上运行,并可以与ActiveX控制通过脚本描述语言进行通信。

1.3. ActiveX与Java的比较

ActiveX提供了一种扩展包括Java在内的任何编程语言的机制,Java的开发人员可以在Applet中使用ActiveX技术,直接嵌入ActiveX控制,或者以ActiveX技术为桥梁,将其它开发商提供的多种语言的程序对象集成到Java中。与Java的字节码技术相比,ActiveX提供了“代码签名”(Code Signing)技术保证其安全性。

1.4. Internet Explorer和Netscape Navigator

不言而喻,Microsoft的Internet Explorer全面支持ActiveX。同时,Microsoft提供了Netscape Navigator的插件(Plug-In),从而使Navigator也可以浏览包含有ActiveX部件的WEB站点。

2. ActiveX控制和Internet

ActiveX控制是OLE控制的更新版本。控制(Control)是建立可编程部件(Component)的主要元素。ActiveX控制可以用于所有支持COM规范的容器中,或者作为Internet控制嵌入到WEB页面中。用户访问该页面时将下载该控制并自动在本地注册。利用脚本描述语言(Script)可以在控制之间以及客户与服务器之间通过设置属性(Property)、调用方法(Method)和激活事件(Event)进行通信。

ActiveX控制与以前的OLE控制相比,具有更少的接口,并且可以没有窗口。所有的ActiveX控制都支持IUnknown接口。

目前,很多第三方开发商编制了各式各样的ActiveX控制。在Internet上,有超过1000个ActiveX控制供用户下载使用。在WINDOWS的SYSTEM目录下,保存有很多Window提供的ActiveX控制。Microsoft Visual C++(以下简称VC)提供的MFC(Microsoft Foundation

Classes)控制都是ActiveX控制。

考虑到当前Internet相对较低的传输速率,设计运行于Internet的ActiveX控制时,必须考虑以下几个问题:

* 控制尽可能小;

* 持续存储数据(Persist Data)如何保存;

* 如何在Internet上下载和安装;

* 控制如何在客户端注册;

3. ActiveX文档和Internet

ActiveX文档提供了传统的嵌入对象的扩展方法。ActiveX文档对象可以包含多个页,显示在整个客户区中,并支持原有的菜单功能。与以往的嵌入对象不同的是,ActiveX文档对象不再以一个阴影方框包围来显示,而是全框架(Full Frame),并总处于激活状态。

Microsoft Office97提供了Microsoft Office Binder,用来生成并浏览由Microsoft Word、Microsoft Excel或者用户定义的ActiveX文档等构成的复合文档,每一种文档类型都可以直接进行编辑修改。

ActiveX文档可以作为对象嵌入到WEB网页中,在WEB上发布。

4. ActiveX脚本描述语言

利用VBScript或者Microsoft JScript,可以向Web页面中加入可用于交互的ActiveX控制,将数据预处理或者检验过程放在客户端进行,然后将结果传往WEB服务器。

5. ActiveX服务器框架

在WEB服务器上创建扩展应用程序,动态生成WEB页面。使用MFC提供的ISAPI类可以方便地建立WEB服务器端的扩展应用程序。

6. Visual C++ 5.0对ActiveX的支持

VC++ 5.0(企业版)为Internet开发提供了完整的解决发案,其内容是:

* 使用MFC或者ATL开发ActiveX控制和ActiveX文档。

* 使用ISAPI设计WEB服务器端的部件。

* 使用WinInet 开发通过Internet存取文件的应用程序。

* 使用Asynchronous Monikers生成从Internet下载数据的应用程序。

* 使用ActiveX SDK开发其它类型的基于Internet的Win32应用程序,包括ActiveX

Scripting Host,Microsoft WebConferencing等。

6.1. 用VC5.0开发ActiveX控制

VC++5.0提供两个途径开发ActiveX控制:MFC和ATL(Active Template Library)。使用MFC,可以不必理会控制接口的细节,把注意力集中在控制本身的功用上,但是生成的控制比较大。而且,客户端如果要运行此ActiveX控制,必须拥有相应版本的MFC类库的DLL,否则,必须同时下载这些巨大的类库;使用ATL,由于不涉及MFC的标准类库,生成的控制相对较小,但开发者必须了解COM、OLE技术的细节。大多数情况下,可以使用MFC开发ActiveX控制,这样比较容易。而且,由于Internet Explorer 3.0提供了MFC 4.1的类库,而Internet Explorer 3.0是Windows95提供的组件,所以,只要ActiveX控制使用的是MFC 4.1或者更早的版本,多数情况下不需要下载MFC的类库。

使用MFC开发ActiveX控制,可以用MFC ActiveX Control Wizard生成工程框架。VC会自动产生三个类:(假设MyName是控制的名字。)

* CMyNameApp:从类COleControlModule派生,而类COleControlModule则派生自CWinApp;

* CMyNameCtrl:从类COleControl派生,而类COleControl则派生自CWnd;

* CMyNamePropPage:从类COlePropertyPage派生,而类COlePropPage则派生自CDialog;

可以看出,这个框架与一般的MFC应用程序有些类似。开发人员的大部分工作在CMyNameCtrl中,例如用Class Wizard添加属性、方法和事件,处理显示等。

编译生成OCX文件后,用VC提供的ActiveX Test Container测试这个控制,也可以用OLE/COM Object Viewer浏览此控制的接口信息及类型库。

6.2. ActiveX控制在WEB上的应用

考虑到WEB的安全性,为了在服务器与客户端建立良好的信任关系,必须为每个在WEB上使用ActiveX控制设置一个“代码签名”(Code Signing)。VC5.0提供了生成供测试用的“代码签名”的工具。如果要正式发布,则必须向有关机构申请。(参见http:///intdev/signcode/)

在WEB页面中使用ActiveX控制,还要对之进行包装,将有关的动态连接库及信息文件压缩到一个扩展名为CAB(Cabinet)文件中。可以使用VC5.0提供的工具包装ActiveX控制。在HTML文件中,使用OBJECT标签插入ActiveX控制,并利用VBScript或者JScript访问该ActiveX控制。客户端用Internet Explorer浏览此页面时,可以自动解包该文件。出于安全性的考虑,Internet Explorer为ActiveX 部件的下载、初始化、是否拥有合法的代码签名以及是否允许Scripting等设置了不同的安全级别,用户可根据需要进行设置。下面这个例子中,使用了ActiveX控制“",当用鼠标单击此控制时,控制的标题将改变。

<OBJECT

CLASSID="clsid:31291E80-728C-11CF-93D5-0020AF99504A"

CODEBASE="#version=1,0,0,0"

ID=chart1

WIDTH=400

HEIGHT=200

ALIGN=center

</OBJECT>

<SCRIPT language = "VBScript">

Sub chart1_Click()

ext="My Title"

End Sub

这里,必须提供该OCX的ClassID和文件路径或URL。客户端浏览此页面时,先在本地的注册表中查找该ClassID,如果存在,则不必下载。否则,必须按照CODEBASE指定的路径搜索该控制并下载。标签Object中的ID是该OCX的对象的名称,用来访问和设置对象属性,调用对象方法等。

6.3. 用VC5.0开发ActiveX文档服务器

MFC4.2不支持开发ActiveX容器,但支持ActiveX服务器。只要在使用MFC AppWizard时生成应用程序框架时,选择支持Active Document,就可生成标准的ActiveX文档服务器。运行此应用程序时,该文档对象将自动注册。要测试这个ActiveX文档,可以运行任何一个ActiveX文档容器,如Microsoft Binder、Microsoft Word等,再插入此对象。

6.4. VC5.0的ActiveX服务器框架

* ISAPI(Internet Server API)

ISAPI提供了扩展支持WEB服务器的简单而有效的方法。开发人员可以设计生成ISAPI

服务器扩展动态连接库(ISAPI Server Extension DLL),它可以被HTTP服务器调用。例如,客户端用户填写了一个表单,按下“提交”按钮后,输入的数据将被传送至HTTP服务器,激活相应的ISAPI扩展应用程序,该应用程序可以处理用户的输入信息,进行相应的操作。或者,按照用户的要求访问数据库,读取用户指定的数据,动态生成HTML文件,再传回客户端。

* ISAPI 过滤器(ISAPI Filters)

ISAPI过滤器是一种运行在支持ISAPI的HTTP服务器上的动态连接库。它的作用是:监视服务器与客户端的事件,当预先指定的某事件发生时,过滤器被调用,对要传递的数据进行加密或压缩,或者进行身份认证。换句话说,ISAPI过滤器提供了对服务器和客户之间传递的数据进行预处理的功能。

* ISAPI和通用网关接口(CGI)的比较

ISAPI为WEB服务器提供了通用网关接口应用程序的替代解决方案。与CGI不同的是,ISAPI扩展应用程序和HTTP服务器运行在同一个地址空间,不需要创建新的进程,因而不需要进行那些进程之间耗费时间的通讯。ISAPI应用程序可以从HTTP服务器中卸载,为其

它进程腾出内存空间。CGI则必须为每一个任务建立独立的执行文件及URL映射,HTTP服务器收到达每一个请求都将启动一个新的进程。另外,CGI没有与ISAPI过滤器相对应的功能。

6.5. WinInet(Microsoft Win32 Internet Extensions)

VC5.0提供了开发客户端基于WEB的应用程序的API:WinInet,并将其封装成若干MFC类,如CInternetSession、CHttpConnection等。使用这些类,开发人员不需了解TCP/IP以及Winsock的细节,只要针对具体应用建立类对象就可以了。

6.6. Asynchronous Monikers

由于目前网络带宽的限制,用户通常希望能够异步下载数据,例如异步下载网页的一张图片,并显示下载进度。MFC提供了类CAsyncMonikerFile来实现这个功能。

6.7. ActiveX SDK

VC5.0还提供了专门的WIN32 ActiveX开发工具:ActiveX Software Development Kit(ActiveX SDK)。ActiveX SDK包含一系列接口定义及与Internet有关的WIN32函数,包括ActiveX Scripting Component、Web Browsing Object、WebPost API等,用户可以利用这些接口和API开发面向WEB的应用程序或ActiveX部件。

6.8. Visual C++ 6.0

1998年9月,Microsoft将推出的Visual C++6.0。VC6.0除了保留VC5.0的ActiveX支持外,还将支持DHTML,MFC及ATL的类库及模板也有扩充。用户可以方便地开发出类似WEB浏览器界面的应用程序。

7. Visual Basic 5.0对ActiveX的支持

7.1. Visual Basic 部件

Visual Basic 5.0(以下简称VB)的部件(Component)是由可执行代码构成的文件(EXE,DLL,OCX),它可以为其他应用程序或者部件使用。以前版本的V B允许用户生成称为"OLE

Server"的部件,VB5.0扩展了部件设计功能,支持引发事件,异步回调(Call-backs)等,并增强了创建ActiveX控制和ActiveX文档的功能。

VB5.0的ActiveX部件(Component)包括:

* ActiveX控制

ActiveX控制与客户应用程序运行在同一个进程中。用VB5.0创建可用于VB或者其它开发工具及WEB浏览器的ActiveX控制,与一般的VB应用程序设计大同小异。可以为ActiveX控制加上属性页,并实时调试。另外,VB5.0提供了一组强大的数据库存取控制,

开发人员只需编写少量代码就可以完成一般的数据库操作。

* ActiveX文档

VB5.0的ActiveX文档提供了内置的窗口滚动、超链接以及菜单支持,直接嵌入WEB页中。编制ActiveX文档与设计VB表单(FORM)完全相同,用户可以选择生成ActiveX

Document DLL或者ActiveX Document EXE。无论哪一种类型,VB都将生成一个类似表单文件的VBD(Visual Basic Document)文件。可以直接用Internet Explorer来浏览这个文件,或者用VBScript或者JScript进行访问。

* ActiveX DLL

ActiveX DLL提供的对象与应用程序运行于同一个进程中。应用程序可以创建对象,设置对象属性,调用对象的方法。ActiveX DLL一般不需要建立用户界面。

* ActiveX EXE

ActiveX EXE提供的对象与应用程序运行于在不同的进程中。应用程序创建对象,调用对象的方法后,可以继续进行自己的工作。当对象的工作完成后,它会通知应用程序。

ActiveX DLL和ActiveX EXE合称为Visual Basic 代码部件(Code Component)。

7.2. 包装ActiveX部件

上述ActiveX部件都可以使用VB5.0的Setup Wizard进行包装,生成采用Lempel-Ziv压缩算法的CAB文件,在WEB上发布。Setup Wizard将把相关的动态连接库及信息文件一同包装。使用VB5.0生成的ActiveX 部件,可以包装成Safe Scripting和Safe Initializing。

7.3. ActiveX文档在WEB上的应用

向WEB页面中加入ActiveX文档,首先要将该ActiveX文档包装成CAB文件。由于Internet Explorer读入ActiveX文档时,该文档将取代当前的WEB页,因此,一般将ActiveX文档(即HTML的标记OBJECT)放在一个独立的HTML文件中。例如,下面这条语句建立了一个超链接:

<A hRef="">Link to a ActiveX Document </A>

其中,是下载ActiveX文档的HTML 文件:

<OBJECT

classid="clsid:2F390484-1C7D-11D0-8908-00A0C90395F4"

codebase="#version=1,0,0,0">

</OBJECT>

这条语句将下载,并在Windows注册表中注册该ActiveX文档。

7.4. Visual Basic 代码部件在WEB上的应用

Visual Basic 代码部件包括ActiveX DLL和ActiveX EXE,它们可以在服务器端运行,也可以从客户端下载再运行。

如果某个ActiveX DLL运行在服务器端,服务器上运行的是Internet Information Server,则可以使用VB的提供的函数进行访问,或者基于Active Server Pages使用VBScript或者JScript。

如果希望客户端下载某个代码部件,则首先要将该部件包装成CAB文件。例如,用VB5.0企业版生成了一个ActiveX DLL:,它只有一个类:MyClass,其唯一的方法是显示LogIn对话框。用Setup Wizard包装这个部件,生成了CAB文件。下面的语句将在客户端下载:

<OBJECT ID=MyClass

CLASSID="CLSID:503B3E09-2191-11D2-8E90-00104B64F7B7"

CODEBASE="">

</OBJECT>

<INPUT TYPE=button VALUE="LogIn NOW" NAME="BtnLogin">

<!--

When the button is clicked,call the "LogIn" method.

-->

<SCRIPT language = "VBScript">

<!--

Sub Window_OnLoad

End Sub

Sub BtnLogin_OnClick()

End Sub

-->

</Script>

其中,Object ID是这个ActiveX DLL中某个类的名字。当此WEB页面被下载并显示时,MyClass类的方法LogIn将被调用,并在客户端显示LogIn对话框。

7.3. Visual Basic 6.0

Microsoft计划于1998年9月推出Visual Basic 6.0。目前Beta版正在测试。VB 6.0与VB5.0相比,除继续支持Internet Explorer Document Object Model(DOM)开发之外,将提供两个令人兴奋的新功能:

* Dynamic HTML编辑器

开发人员可以象编制普通VB程序一样,制作DHTML文件或模板。

* WebClasses;

开发人员可以在WEB服务器端建立与ASP文件一一对应的WebClass类,每个类都可以访问ASP对象,在Visual Basic IDE中跟踪调试,并生成 ISAPI 动态连接库。

8. 小结

正如Internet和WEB技术一样,ActiveX技术的发展日新月异,新的更强大的开发工具使得服务器及客户端的应用开发、网站建设变得更简单,并容易扩展和重用。随着Microsoft的包括Windows NT、Internet Information Server、Active Server Pages以及Microsoft

FrontPage、Internet Explorer等组件在内完整的Internet解决方案被广泛使用,ActiveX技术将会有更大的发展。

DirectX:

是一种图形应用程序接口(API),简单的说它是一个辅助软件,一个提高系统性能的加速软件,由微软创建开发的,微软将定义它为“硬件设备无关性”。Direct是直接的意思,X是很多东西,加在一起就是一组具有共性的东西,从内部原理探讨,也简单说来DirectX 就是一系列的 DLL (动态连接库),通过这些 DLL,开发者可以在无视于设备差异的情况下访问底层的硬件,DirectX 封装了一些 COM(Component Object Model)对象,这些 COM 对象为访

问系统硬件提供了一个主要的接口。

DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct

Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。DirectX开发之初是为了弥补Windows 3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口。

DirectX 1.0

第一代的DirectX很不成功,推出时众多的硬件均不支持,当时基本都采用专业图形API-OpenGL,缺乏硬件的支持成了其流行的最大障碍。

DirectX 1.0版本是第一个可以直接对硬件信息进行读取的程序。它提供了更为直接的读取图形硬件的性能(比如:显示卡上的块移动功能)以及基本的声音和输入设备功能(函数),使开发的游戏能实现对二维(2D)图像进行加速。这时候的DirectX不包括现在所有的3D功能,还处于一个初级阶段。

DirectX 2.0

DirectX 2.0在二维图形方面做了些改进,增加了一些动态效果,采用了Direct 3D的技术。这样DirectX 2.0与DirectX 1.0有了相当大的不同。在DirectX 2.0中,采用了“平滑模拟和RGB模拟”两种模拟方式对三维(3D)图像进行加速计算的。DirectX 2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。从DirectX 2.0开始,整个DirectX的设计架构雏形就已基本完成。

DirectX 3.0

DirectX 3.0的推出是在1997年最后一个版本的Windows95发布后不久,此时3D游戏开始深入人心,DirectX也逐渐得到软硬件厂商的认可。97年时应用程序接口标准共有三个,分别是专业的OpenGL接口,微软的DirectX D接口和3DFX公司的Glide接口。而那时的3DFX公司是最为强大的显卡制造商,它的Glide接口自然也受到最广泛的应用,但随着3DFX公司的没落,Voodoo显卡的衰败,Glide接口才逐渐消失了。

DirectX 3.0是DirectX 2.0的简单升级版,它对DirectX 2.0的改动并不多。包括对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)的一些修改和升级。DirectX 3.0集成了较简单的3D效果,还不是很成熟。

DirectX 5.0

微软公司并没有推出DirectX 4.0,而是直接推出了DirectX 5.0。此版本对Direct3D做出了很大的改动,加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。

同时,DirectX 5.0在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX 5.0才真正走向了成熟。此时的DirectX性能完全不逊色于其它3D API,而且大有后来居上之势。

DirectX 6.0

DirectX 6.0推出时,其最大的竞争对手之一Glide,已逐步走向了没落,而DirectX则得到

了大多数厂商的认可。DirectX 6.0中加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。

DirectX 7.0

DirectX 7.0最大的特色就是支持T&L,中文名称是“坐标转换和光源”。3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。虽然OpenGL中已有相关技术,但此前从未在民用级硬件中出现。

在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显示卡的GPU来计算,这样就可以把CPU从繁忙的劳动中解脱出来。换句话说,拥有T&L显示卡,使用DirectX 7.0,即使没有高速的CPU,同样能流畅的跑3D游戏。

DirectX 8.0

DirectX 8.0的推出引发了一场显卡革命,它首次引入了“像素渲染”概念,同时具备像素渲染引擎(Pixel Shader)与顶点渲染引擎(Vertex Shader),反映在特效上就是动态光影效果。同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。通过VS和PS的渲染,可以很容易的宁造出真实的水面动态波纹光影效果。此时DirectX的权威地位终于建成。

DirectX 9.0

2002年底,微软发布DirectX9.0。DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。

PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。

VS 2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX8)的VS性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。

增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。

显卡所支持的DirectX版本已成为评价显卡性能的标准,从显卡支持什么版本的DirectX,

用户就可以分辨出显卡的性能高低,从而选择出适合于自己的显卡产品。

本文标签: 控制进行对象服务器文档