设计一个软件时想为其添加对外的COM接口,使客户可以从远程编程调用软件的各种功能,比如象MATLAB就提供了这种接口,一个客户在远程无需安装MATLAB而只使用一个调用了MATLAB提供的COM接口的客户程序即可远程使用MATLAB,调用它的各种函数和功能。我在开发时却发现很难找到有光这方面的资料,哪位老兄有这方面的开发心得,或者知道哪里可以找到这方面的编程资料,我将不胜感激。

解决方案 »

  1.   

    一.ActiveX的内容   ActiveX既包括服务器端技术,也包括客户端技术,其主要内容如下。   1.ActiveX控件   ActiveX控件是OLE控件的更新版本。控件(Control)是建立可编程部件(Component)的主要元素。ActiveX控件可以用于所有支持COM规范的容器中,或者作为Internet控件嵌入到Web页面中。用户访问该页面时,将下载该控件并自动在本地注册。利用脚本描述语言(Script)可以在控件之间以及客户与服务器之间通过设置属性(Property)、调用方法(Method)和激活事件(Event)进行通信。目前,很多第三方开发商编制了各式各样的ActiveX控件,在Internet上有一千多个ActiveX控件可供用户下载使用。   2.ActiveX文档   ActiveX文档提供了传统的嵌入对象的扩展方法。ActiveX文档对象可以包含多个页,显示在整个客户区中,并支持原有的菜单功能。ActiveX文档可以作为对象嵌入到Web网页中,并在Web上发布。   Microsoft Office 97提供了Microsoft Office Binder,用来生成并浏览由Microsoft Word、Microsoft Excel或者用户定义的ActiveX文档等构成的复合文档。每一种文档类型都可以直接进行编辑修改。   3.ActiveX脚本描述语言   利用VBScript或者JavaScript,可以向Web页面中加入用于交互的ActiveX控件,将数据预处理或者把检验过程放在客户端运行,然后将结果传给Web服务器。   4.ActiveX服务器框架   在Web服务器上创建扩展应用程序,动态生成Web页面。使用MFC提供的ISAPI类可以方便地建立Web服务器端的扩展应用程序。   5.在IE中内置Java虚拟机   Java虚拟机(Java Virtual Machine)使Java Applet能够在Internet Explorer中运行,并可以通过脚本描述语言与ActiveX控件进行通信。   ActiveX还提供了一种扩展编程语言(包括Java语言在内)的机制,使Java的开发人员可以在Applet中直接嵌入ActiveX控件,或者以ActiveX技术为桥梁,将其他开发商提供的程序对象集成到Java程序中。   二.Visual C++对ActiveX的支持   VC++(企业版)为Internet的开发提供了完整的解决方案,其内容如下。   (1)使用MFC或者ATL开发ActiveX控件和ActiveX文档;   (2)使用ISAPI设计Web服务器端的部件;   (3)使用WinInet开发通过Internet存取文件的应用程序;   (4)使用Asynchronous Monikers生成从Internet下载数据的应用程序;   (5)使用ActiveX SDK开发其他类型的基于Internet的Win32应用程序,包括ActiveX Scripting Host、Microsoft WebConferencing等。   1.用VC开发ActiveX控件   VC++提供了两种途径来开发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是Windows 95提供的组件,所以,只要ActiveX控件使用的是MFC 4.1或者更早的版本,则多数情况下是不需要下载MFC类库的。   使用MFC开发ActiveX控件,可以用MFC ActiveX Control Wizard生成工程框架,VC会自动产生如下三个类(假设MyName是控件的名字)。   (1)CMyNameApp:从类COleControlModule派生,而类COleControlModule则派生自CWinApp;   (2)CMyNameCtrl:从类COleControl派生,而类COleControl则派生自CWnd;   (3)CMyNamePropPage:从类COlePropertyPage派生,而类COlePropPage则派生自Cdialog。   编译生成OCX文件后,用VC提供的ActiveX Test Container测试这个控件,也可以用OLE/COM Object Viewer浏览此控件的接口信息及类型库。   2.ActiveX控件在Web上的应用   与Java的字节码技术相比,ActiveX提供了“代码签名”(Code Signing)技术以保证其安全性,并在服务器与客户端建立良好的信任关系。要为每个在Web上使用的ActiveX控件设置一个“代码签名”(Code Signing),可以使用VC提供的 “代码签名”工具,该工具可以生成和测试“代码签名”。如果要正式发布,则必须向有关机构申请(参见http://www.microsoft.com/intdev/signcode/网址上的内容)。在Web页面中使用ActiveX控件,还要对其进行包装,将有关的动态链接库及信息文件压缩到一个扩展名为CAB(Cabinet)的文件中,也可以使用VC提供的工具包装ActiveX控件。在HTML文件中,使用OBJECT标签插入ActiveX控件,并利用VBScript或者JavaScript访问该控件。在客户端用Internet Explorer浏览此页面时,IE可以自动解包该文件。出于安全性的考虑,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对象的名称,用来访问和设置对象属性以及调用对象方法等。   3.用VC开发ActiveX文档服务器   MFC 4.2不支持开发ActiveX容器,但支持ActiveX服务器。只要在使用MFC AppWizard生成应用程序框架时选择支持Active Document,就可以生成标准的ActiveX文档服务器。运行此应用程序时,该文档对象将自动注册。要测试这个ActiveX文档,则可以运行任何一个ActiveX文档容器,如Microsoft Binder、Microsoft Word等,再插入此对象。   4.VC的ActiveX服务器框架   (1)ISAPI(Internet Server API)   ISAPI过滤器提供了扩展支持Web服务器的简单而有效的方法,开发人员可以设计生成ISAPI 服务器扩展动态链接库(ISAPI Server Extension DLL),它可以被HTTP服务器调用。   (2)ISAPI过滤器(ISAPI Filters)   ISAPI过滤器是一种运行在支持ISAPI的HTTP服务器上的动态连接库,它的作用是:监视服务器与客户端的事件。当预先指定的某事件发生时,过滤器被调用,对要传递的数据进行加密、压缩或者身份认证。换句话说,ISAPI过滤器提供了对服务器和客户之间传递的数据进行预处理的功能。   (3)ISAPI和通用网关接口(CGI)的比较   ISAPI为Web服务器提供了通用网关接口应用程序的替代解决方案,与CGI不同的是,ISAPI扩展应用程序和HTTP服务器运行在同一个地址空间,不需要创建新的进程,因而不需要进行那些进程之间耗费时间的通信。ISAPI应用程序可以从HTTP服务器上卸载,为其他进程腾出内存空间,CGI则必须为每一个任务建立独立的执行文件及URL映射,HTTP服务器每收到一个请求都会启动一个新的进程。另外,CGI没有与ISAPI过滤器相对应的功能。   5.WinInet(Microsoft Win32 Internet Extensions)   VC提供了开发客户端基于Web的应用程序的API:WinInet,并将其封装成若干MFC类,如CInternetSession、CHttpConnection等。使用这些类,开发人员不需了解TCP/IP以及Winsock的细节,只要针对具体应用建立类对象就可以了。   6.Asynchronous Monikers   目前,由于网络带宽的限制,用户通常希望能够异步下载数据,例如异步下载网页的一张图片并显示下载进度等。MFC提供了类CAsyncMonikerFile来实现这个功能。   7.ActiveX SDK   VC还提供了专门的Win32 ActiveX开发工具ActiveX Software Development Kit(ActiveX SDK)。ActiveX SDK包含一系列接口定义以及与Internet有关的Win32函数,包括ActiveX Scripting Component、Web Browsing Object、WebPost API等,用户可以利用这些接口和API来开发面向Web的应用程序或ActiveX部件。   8.VC 6.0的新功能   1998年9月,Microsoft推出了的Visual C++ 6.0,VC 6.0除了保留VC 5.0对ActiveX的支持外,还将支持DHTML、MFC及ATL的类库,并对模板也有扩充,用户可以方便地开发出类似Web浏览器界面的应用程序。
      

  2.   

    使用C++Builder很方便。
    http://www.csdn.net/cnshare/soft/11/11463.shtm
      

  3.   

    njustcxy(冷眼)兄,是否有更贴近实际问题一点的启发?