.visualc++5.0对activex的支持
vc++5.0(企业版)为inte.net开发提供了完整的解决发案,其内容是:
*使用mfc或者atl开发activex控制和activex文档。
*使用isapi设计web服务器端的部件。
*使用win.net开发通过inte.net存取文件的应用程序。
*使用asynchronousmonikers生成从inte.net下载数据的应用程序。
*使用activexsdk开发其它类型的基于inte.net的win32应用程序,包括activexscriptinghost,microsoftwebconferencing等。
6.1.用vc5.0开发activex控制
vc++5.0提供两个途径开发activex控制:mfc和atl(activetemplatelibrary)。使用mfc,可以不必理会控制接口的细节,把注意力集中在控制本身的功用上,但是生成的控制比较大。而且,客户端如果要运行此activex控制,必须拥有相应
版本的mfc类库的dll,否则,必须同时下载这些巨大的类库;使用atl,由于不涉及mfc的标准类库,生成的控制相对较小,但开发者必须了解com、ole技术的细节。大多数情况下,可以使用mfc开发activex控制,这样比较容易。而且,由于inte.netexplorer3.0提供了mfc4.1的类库,而inte.netexplorer3.0是windows95提供的组件,所以,只要activex控制使用的是mfc4.1或者更早的版本,多数情况下不需要下载mfc的类库。
使用mfc开发activex控制,可以用mfcactivexcontrolwizard生成工程框架。vc会自动产生三个类:(假设myname是控制的名字。)
*cmynameapp:从类colecontrolmodule派生,而类colecontrolmodule则派生自cwinapp;
*cmynamectrl:从类colecontrol派生,而类colecontrol则派生自cwnd;
*cmynameproppage:从类colepropertypage派生,而类coleproppage则派生自cdialog;
可以看出,这个框架与一般的mfc应用程序有些类似。开发人员的大部分工作在cmynamectrl中,例如用classwizard添加属性、方法和事件,处理显示等。
编译生成ocx文件后,用vc提供的activextestcontainer测试这个控制,也可以用ole/comobjectviewer浏览此控制的接口信息及类型库。
6.2.activex控制在web上的应用
考虑到web的安全性,为了在服务器与客户端建立良好的信任关系,必须为每个在web上使用activex控制设置一个“代码签名”(codesigning)。vc5.0提供了生? 测试用的“代码签名”的工具。如果要正式发布,则必须向有关机构申请。
(参见http://www.microsoft.com/intdev/signcode/)
在web页面中使用activex控制,还要对之进行包装,将有关的动态连接库及信息文件压缩到一个扩展名为cab(cab.net)文件中。可以使用vc5.0提供的工具包装activex控制。在html文件中,使用object标签插入activex控制,并利用vbscript或者jscript访问该activex控制。客户端用inte.netexplorer浏览此页面时,可以自动解包该文件。出于安全性的考虑,inte.netexplorer为activex部件的下载、初始化、是否拥有合法的代码签名以及是否允许scripting等设置了不同的
安全级别,用户可根据需要进行设置。下面这个例子中,使用了activex控制“mschart.ocx",当用鼠标单击此控制时,控制的标题将改变。
$#@60;object
classid="clsid:31291e80-728c-11cf-93d5-0020af99504a"
codebase="mschart.cab#version=1,0,0,0"
id=chart1
width=400
height=200
align=center
$#@62;
$#@60;/object$#@62;
$#@60;scriptlanguage="vbscript"$#@62;
subchart1_click()
document.chart1.titletext="mytitle"
endsub
这里,必须提供该ocx的classid和文件路径或url。客户端浏览此页面时,先在本地的注册表中查找该classid,如果存在,则不必下载。否则,必须按照codebase指定的路径搜索该控制并下载。标签object中的id是该ocx的对象的名称,用来
访问和设置对象属性,调用对象方法等。
6.3.用vc5.0开发activex文档服务器
mfc4.2不支持开发activex容器,但支持activex服务器。只要在使用mfcappwizard时生成应用程序框架时,选择支持activedocument,就可生成标准的activex文档服务器。运行此应用程序时,该文档对象将自动注册。要测试这个activex文档,可以运行任何一个activex文档容器,如microsoftbinder、microsoftword等,再插入此对象。
6.4.vc5.0的activex服务器框架
*isapi(inte.netserverapi)
isapi提供了扩展支持web服务器的简单而有效的方法。开发人员可以设计生成is api服务器扩展动态连接库(isapiserverextensiondll),它可以被http服务器调用。例如,客户端用户填写了一个表单,按下“提交”按钮后,输入的数据将被传送至http服务器,激活相应的isapi扩展应用程序,该应用程序可以处理用户的输入信息,进行相应的操作。或者,按照用户的要求访问数据库,读取用户指定的数据,动态生成html文件,再传回客户端。
*isapi过滤器(isapifilters)
isapi过滤器是一种运行在支持isapi的http服务器上的动态连接库。它的作用是:监视服务器与客户端的事件,当预先指定的某事件发生时,过滤器被调用,对要传递的数据进行加密或压缩,或者进行身份认证。换句话说,isapi过滤器提供了对服务器和客户之间传递的数据进行预处理的功能。
*isapi和通用网关接口(cgi)的比较
isapi为web服务器提供了通用网关接口应用程序的替代解决方案。与cgi不同的是,isapi扩展应用程序和http服务器运行在同一个地址空间,不需要创建新的进程,因而不需要进行那些进程之间耗费时间的通讯。isapi应用程序可以从http服务 器中卸载,为其它进程腾出内存空间。cgi则必须为每一个任务建立独立的执行文件及url映射,http服务器收到达每一个请求都将启动一个新的进程。另外,cgi没有与isapi过滤器相对应的功能。
6.5.win.net(microsoftwin32inte.netextensions)
vc5.0提供了开发客户端基于web的应用程序的api:win.net,并将其封装成若干mfc类,如cinte.netsession、chttpconnection等。使用这些类,开发人员不需了解tcp/ip以及winsock的细节,只要针对具体应用建立类对象就可以了。
6.6.asynchronousmonikers
由于目前网络带宽的限制,用户通常希望能够异步下载数据,例如异步下载网页的一张图片,并显示下载进度。mfc提供了类casyncmonikerfile来实现这个功能。
6.7.activexsdk
vc5.0还提供了专门的win32activex开发工具:activexsoftwaredevelopmentkit(activexsdk)。activexsdk包含一系列接口定义及与inte.net有关的win32函数,包括activexscriptingcomponent、webbrowsingobject、webpost api等,用户可以利用这些接口和api开发面向web的应用程序或activex部件。
6.8.visualc++6.0
1998年9月,microsoft将推出的visualc++6.0。vc6.0除了保留vc5.0的activex支持外,还将支持dhtml,mfc及atl的类库及模板也有扩充。用户可以方便地开发出类似web浏览器界面的应用程序。
7.visualbasic5.0对activex的支持
7.1.visualbasic部件
visualbasic5.0(以下简称vb)的部件(component)是由可执行代码构成的文件(exe,dll,ocx),它可以为其他应用程序或者部件使用。以前版本的vb允许用户生成称为"oleserver"的部件,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)完全相同,用户可以选择生成activexdocumentdll或者activexdocumentexe。无论哪一种类型,vb都将生成一个类似表单文件的vbd(visualbasicdocument)文件。可以直接用inte.net explorer来浏览这个文件,或者用vbscript或者jscript进行访问。
*activexdll
activexdll提供的对象与应用程序运行于同一个进程中。应用程序可以创建对象,设置对象属性,调用对象的方法。activexdll一般不需要建立用户界面。
*activexexe
activexexe提供的对象与应用程序运行于在不同的进程中。应用程序创建对象,调用对象的方法后,可以继续进行自己的工作。当对象的工作完成后,它会通知应用程序。
activexdll和activexexe合称为visualbasic代码部件(codecomponent)。
7.2.包装activex部件
上述activex部件都可以使用vb5.0的setupwizard进行包装,生成采用lempel-ziv压缩算法的cab文件,在web上发布。setupwizard将把相关的动态连接库及信息文件一同包装。使用vb5.0生成的activex部件,可以包装成safescripting和safeinitializing。
7.3.activex文档在web上的应用
向web页面中加入activex文档,首先要将该activex文档包装成cab文件。由于inte.netexplorer读入activex文档时,该文档将取代当前的web页,因此,一般将activex文档(即html的标记object)放在一个独立的html文件中。例如,下面这条语句建立了一个超链接:
$#@60;ahref="activexdoc.htm"$#@62;linktoaactivexdocument$#@60;/a$#@62;
其中,activexdoc.htm是下载activex文档的html文件:
$#@60;object
classid="clsid:2f390484-1c7d-11d0-8908-00a0c90395f4"
codebase="activexdoc.cab#version=1,0,0,0"$#@62;
$#@60;/object$#@62;
这条语句将下载activexdoc.cab,并在windows注册表中注册该activex文档。
7.4.visualbasic代码部件在web上的应用
visualbasic代码部件包括activexdll和activexexe,它们可以在服务器端运行,也可以从客户端下载再运行。
如果某个activexdll运行在服务器端,服务器上运行的是inte.netinformationserver,则可以使用vb的oleisapi2.dll提供的函数进行访问,或者基于activeserverpages使用vbscript或者jscript。
如果希望客户端下载某个代码部件,则首先要将该部件包装成cab文件。例如,用vb5.0企业版生成了一个activexdll:mydll.dll,它只有一个类:myclass,其唯一的方法是显示login对话框。用setupwizard包装这个部件,生成了cab文件。下面的语句将在客户端下载mydll.cab:
$#@60;objectid=myclass
classid="clsid:503b3e09-2191-11d2-8e90-00104b64f7b7"
codebase="mydll.cab"$#@62;
$#@60;/object$#@62;
$#@60;inputtype=buttonvalue="loginnow"name="btnlogin"$#@62;
$#@60;!--
whenthebuttonisclicked,callthe"login"method.
--$#@62;
$#@60;scriptlanguage="vbscript"$#@62;
$#@60;!--
subwindow_onload
myclass.login
endsub
subbtnlogin_onclick()
myclass.login
endsub
--$#@62;
$#@60;/script$#@62;
其中,objectid是这个activexdll中某个类的名字。当此web页面被下载并显示时,myclass类的方法login将被调用,并在客户端显示login对话框。
7.3.visualbasic6.0
microsoft计划于1998年9月推出visualbasic6.0。目前beta版正在测试。vb6.0与vb5.0相比,除继续支持inte.netexplorerdocumentobjectmodel(dom)开发之外,将提供两个令人兴奋的新功能:
*dynamichtml编辑器
开发人员可以象编制普通vb程序一样,制作dhtml文件或模板。
*webclasses;
开发人员可以在web服务器端建立与asp文件一一对应的webclass类,每个类都可以访问asp对象,在visualbasicide中跟踪调试,并生成isapi动态连接库。
8.小结
正如inte.net和web技术一样,activex技术的发展日新月异,新的更强大的开发工具使得服务器及客户端的应用开发、网站建设变得更简单,并容易扩展和重用。随着microsoft的包括windowsnt、inte.netinformationserver、activeserverpages以及microsoftfrontpage、inte.netexplorer等组件在内完整的inte.net解决方案被广泛使用,activex技术将会有更大的发展。
参考文献:
1.visualc++技术内幕(第二版),[美]davidj.kruglinski著,王国印译,
清华大学出版社。
2.activex开发人员指南,[美]erictall,markginsburg著,章巍等译,机械
工业出版社。
3.visualbasic6.0:youwontbelievewhatjusthittheweb,joshuat
rupin,microsoftinteractiv.networkdeveloper(mind),1998年8月。
4.introductiontoactivexcontrols,microsoftcorp.,msdn,1998年8月。
5.dynamichtmlandthebigpicture,johnswenson,msdnonline,1997年11月。
6.abriefpreviewofthevisualbasic5.0developmentenvironment,michaelotey,windowsntmagazine,1997年4月。
7.http://www.microsoft.com/,microsoft公司,包括msdn、msj等技术资源。
8.http://www.activex.com,第三方开发的activex控制。
9.http://www.active-x.com,有关activex技术的文档资料。
10.http://www.winntmag.com,windowsntmagazine杂志。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器