【求助】想问学习COM 和ActiveX技术有什么用处? 高手指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 总的来说,这些技术出现的根本目的是为了解决软件的重用问题,在软件发展的过程中,常常有许多模块,他们的原代码几乎相同,但当时你不许如此重复的写,人们就开始寻求一种让代码能重复使用但却能实现不同功能的方法,其中函数,类就是在这个基础上发展起来的,到后来的动态连接库。但这些都不能满足软件发展的需要,因为函数只能实现一些小范围的代码重用,没能从根本上解决问题,而类的出现解决了这个问题,但类的重用是在原代码级别上的重用,那里需要就把这些原代码添加到程序中,这样,用一次就要重新编译连接一次,执行效率低,对于一些对时间要求比较苛刻的工程,这样远远不够,于是,动态连接库出现了,他的重用是建立在二进制代码级别上,解决了上面存在的问题。但是,不是每个程序员都学一样的编程语言,有的用C++语言,有的用Java语言等,而动态连接库却有编程语言的限制,用C++编写的动态连接库只能在C编译器的环境下使用,用java编写的却只能在java环境使用,移植性较差,不能满足大型项目开发中协同作战的要求,于是,COM就在这种背景下诞生了。他没有语言的限制,可以令不同语言编写的软件模块很好地组合成一个软件,而且有利于软件的维护和升级。而ActiveX是在COM的基础上更上一级的产物。 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://www.microsoft.com/intdev/signcode/) 在WEB页面中使用ActiveX控制,还要对之进行包装,将有关的动态连接库及信息文件压缩到一个扩展名为CAB(Cabinet)文件中。可以使用VC5.0提供的工具包装ActiveX控制。在HTML文件中,使用OBJECT标签插入ActiveX控制,并利用VBScript或者JScript访问该ActiveX控制。客户端用Internet Explorer浏览此页面时,可以自动解包该文件。出于安全性的考虑,Internet Explorer为ActiveX 部件的下载、初始化、是否拥有合法的代码签名以及是否允许Scripting等设置了不同的安全级别,用户可根据需要进行设置。下面这个例子中,使用了ActiveX控制“MSChart.OCX",当用鼠标单击此控制时,控制的标题将改变。 <OBJECT CLASSID="clsid:31291E80-728C-11CF-93D5-0020AF99504A" CODEBASE="MSCHART.CAB#version=1,0,0,0" ID=chart1 WIDTH=400 HEIGHT=200 ALIGN=center > </OBJECT> <SCRIPT language = "VBScript"> Sub chart1_Click() Document.chart1.TitleText="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="ActiveXDoc.htm">Link to a ActiveX Document </A> 其中,ActiveXDoc.htm是下载ActiveX文档的HTML 文件: <OBJECT classid="clsid:2F390484-1C7D-11D0-8908-00A0C90395F4" codebase="ActiveXDoc.cab#version=1,0,0,0"> </OBJECT> 这条语句将下载ActiveXDoc.cab,并在Windows注册表中注册该ActiveX文档。 7.4. Visual Basic 代码部件在WEB上的应用 Visual Basic 代码部件包括ActiveX DLL和ActiveX EXE,它们可以在服务器端运行,也可以从客户端下载再运行。 如果某个ActiveX DLL运行在服务器端,服务器上运行的是Internet Information Server,则可以使用VB的OLEISAPI2.DLL提供的函数进行访问,或者基于Active Server Pages使用VBScript或者JScript。 如果希望客户端下载某个代码部件,则首先要将该部件包装成CAB文件。例如,用VB5.0企业版生成了一个ActiveX DLL:MyDLL.DLL,它只有一个类:MyClass,其唯一的方法是显示LogIn对话框。用Setup Wizard包装这个部件,生成了CAB文件。下面的语句将在客户端下载MYDLL.CAB: <OBJECT ID=MyClass CLASSID="CLSID:503B3E09-2191-11D2-8E90-00104B64F7B7" CODEBASE="mydll.cab"> </OBJECT> <INPUT TYPE=button VALUE="LogIn NOW" NAME="BtnLogin"> <!-- When the button is clicked,call the "LogIn" method. --> <SCRIPT language = "VBScript"> <!-- Sub Window_OnLoad MyClass.Login End Sub Sub BtnLogin_OnClick() MyClass.Login 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技术将会有更大的发展。 我没那么多长篇大论,就我自己亲身体会,ActiveX灵活,Com单一实例性很有用,可以作为进程间通讯的桥梁。 用shellexecute启动的程序无法获得它的句柄 找几个设计阶段用的软件,大家知道好的推荐下 CDialogBar 的问题 怎样将一个XML文件载入到_RecordsetPtr记录里? 请教一个ACE Proactor服务器(IOCP)的架构设计问题 关于AT命令得几个问题 怎么样不注册一个ACTIVEX控件就可以使用它呢? 请教大家两个关于字符操作的问题 大家好 我是个vc的初学者 有一些入门 但感觉太庞大 无从下手,哪伟大侠能指点迷津? server2003 安装 SqlServer2005后 ,连接不上 ?? 请教自定义数据长度的问题 深圳机会就是多,在这里找到工作,高兴,散分
这条语句将下载ActiveXDoc.cab,并在Windows注册表中注册该ActiveX文档。 7.4. Visual Basic 代码部件在WEB上的应用 Visual Basic 代码部件包括ActiveX DLL和ActiveX EXE,它们可以在服务器端运行,也可以从客户端下载再运行。 如果某个ActiveX DLL运行在服务器端,服务器上运行的是Internet Information Server,则可以使用VB的OLEISAPI2.DLL提供的函数进行访问,或者基于Active Server Pages使用VBScript或者JScript。 如果希望客户端下载某个代码部件,则首先要将该部件包装成CAB文件。例如,用VB5.0企业版生成了一个ActiveX DLL:MyDLL.DLL,它只有一个类:MyClass,其唯一的方法是显示LogIn对话框。用Setup Wizard包装这个部件,生成了CAB文件。下面的语句将在客户端下载MYDLL.CAB: <OBJECT ID=MyClass CLASSID="CLSID:503B3E09-2191-11D2-8E90-00104B64F7B7" CODEBASE="mydll.cab"> </OBJECT> <INPUT TYPE=button VALUE="LogIn NOW" NAME="BtnLogin"> <!-- When the button is clicked,call the "LogIn" method. --> <SCRIPT language = "VBScript"> <!-- Sub Window_OnLoad MyClass.Login End Sub Sub BtnLogin_OnClick() MyClass.Login 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技术将会有更大的发展。
ActiveX灵活,
Com单一实例性很有用,可以作为进程间通讯的桥梁。