WEB下的客户端控件(OCX)的开发应用

[转]在WEB下的客户端控件(OCX)的开发应用
2010-04-22 下午 03:15

1. Visual Basic中ActiveX控件的制作
ActiveX是Microsoft的术语,它是一组包括控件、DLL和ActiveX文档的组件,他通常是以动态连接库形势存在,因此必须在一个叫容器的可独立执行的软件中运行,比如VisualBasic,VisualC++,Internet Explorer等。因此ActiveX控件和容器必须都支持一些特定的接口协议。ActiveX应包括属性,事件和方法这些特殊机制,它也是创建 ActiveX控件的核心。
  从VisualBasic5.0开始,我们就可以用VB创建控件,VB6.0继承了VB5.0的开发第三方控件的能力。创建ActiveX控件有一定的步骤:
(1)确定控件将要实现的功能。这一步很重要,在这里我们应该确定控件的外观,以及它的属性、事件和
方法。
(2)通过UserControl对象设计控件的外观。
(3)将代码添加到UserControl来实现控件的外观和行为。
(4)设计控件的接口,即属性、事件和方法。
(5)创建VB的Standard.EXE工程,利用他调试制作的控件。
(6)编译控件部件,生成.ocx文件。(在"文件"菜单, 有"生成DataTimer.ocx"选项)
制作DLL文件的方法类似。
注册控件的方法:
方法一、Regsvr32.exe注册,Regsvr32.exe位于Windows目录的system子目录下。点击Windows的"开始→运行"菜单,在对话框中输入以下命令:
regsvr32 netshare.ocx //注册netshare.ocx控件
regsvr32 /u netshare.ocx //解除netshare.ocx控件的注册
方法二、新建注册文件,进行添加右键注册和解除的选项。
新建一TEXT文件,输入以下内容:
Windows Registry Editor Version 5.00  
[HKEY_CLASSES_ROOT\ocxfile\shell]
[HKEY_CLASSES_ROOT\ocxfile\shell\注册]
[HKEY_CLASSES_ROOT\ocxfile\shell\注册\command]
@="regsvr32 %1"
[HKEY_CLASSES_ROOT\ocxfile\shell\反注册]
"Command"="regsvr32 %1 /u"
[HKEY_CLASSES_ROOT\ocxfile\shell\反注册\command]
@="regsvr32 %1 /u" 
然后保存成REG文件,双击执行,即完成添加此功能。

  2.制作CAB Internet 包
VB6可以很方便的编写OCX控件及DLL组件,要在网站中使用DLL组件的使用很简单,直接在ASP中使用Server.CreateObject("工程名.组件名")可以在服务器端调用该组件。而OCX使用则因为需要下载到客户端而变得复杂些,要打包成CAB文件进行调用。CAB文件是一种WINDOWS的标准压缩格式文件,在网页上发布ActiveX的时候经常使用该压缩格式对文件进行包装,目的是使文件便于在Internet上传输。

  创建CAB文件的方法有很多,以下是应用VB6实现打包。
OCX打包成internet包步骤:
(1)启运打包程序:菜单"外接程序"-》"外接程序管理器"-》启用"打包和展开向导"
(2)开始打包:菜单"外接程序"-》"打包和展开向导",打包成internet包:选"打包",在选择包类型时选"internet软件包"....
在CAB包中可以包括所有此控件中使用到的DLL文件。
除了在VB6中进行打包外,还可以在Microsoft visual studio .Net 2003中"创建CAB项目"。
对单一的OCX文件打包,也可以用WINDOWS自带的iexpress.exe(c:\windows\system32目录下),在开始菜单->运行里输入iexpress。

  3.为CAB进行签名 
通过Microsoft的验证代码工具,可以对ActiveX控件进行签名,这告诉用户你的确是控件的作者而且没有他人篡改过这个控件; 
为了使用验证代码工具对组件进行签名,必须从证书授权机构获得一个数字证书;证书包含表明特定软件程序是正版的信息,这确保了其他程序不能再使用原程序的标识。证书还记录了颁发日期。当您试图下载软件时,Internet Explorer 会验证证书中的信息,以及当前日期是否在证书的截止日期之前。如果在下载时该信息不是最新的和有效的,Internet Explorer 将显示一个警告; 
在IE默认的安全级别中,ActiveX控件安装之前,用户可以根据自己对软件发行商和软件本身的信任程度,选择决定是否继续安装和运行此软件。 
网络实名插件使用了国际权威安全厂商Verisign所颁发的数字证书进行签名,因此可以确保网络实名插件的真实性和安全性。
使用Microsoft visual studio .Net 2003开发工具。所以你必须拥有Microsoft visual studio .Net 2002以上版本的环境。
1、 获得软件发行证书
第一步:开始菜单->运行,输入cmd.exe。打开windows 2000的命令提示符环境窗口。
第二步:输入CD C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin,进入该目录,用dir命令你可以看到signcode.exe、makecert.exe和 cert2spc.exe程序。注意:以上路径根据你机器Microsoft.Net的安装路径不同而异。
第三步:创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。
输入makecert -sk FortuneAge -n "CN=FortuneAge COMPANY" c:\FortuneAge.cer。
就会在你的C:生成 FortuneAge.cer文件。
说明:参数-n指定主题的证书名称。此名称必须符合 X.500 标准。最简单的方法是在双引号中指定此名称,并加上前缀 CN=;例如,"CN=myName"。注意这里的CN必须大写。-sk指定主题的密钥容器位置,该位置包含私钥。如果密钥容器不存在,系统将创建一个。输入makecert -?可以查看其他参数的用法。
第四步:创建发行者证书 (SPC)。
注意,发行者证书测试工具通过一个或多个 X.509 证书创建发行者证书 (SPC)。Cert2spc.exe 仅用于测试目的。可以从证书颁发机构(如 VeriSign 或 Thawte)获得有效的 SPC。
输入命令:cert2spc c:\FortuneAge.cer c:\FortuneAge.spc,在C:盘生成证书文件。至此,你已经拥有了仅用于测试的软件证书。其实,我们开发的程序或ActiveX控件只要仅用于企业内部,完全可以用这种办法作数字签名,使你的控件可以在浏览器里自动下载,而不必去专门的证书办法机构获得证书。 
第五步:在上面打开的dos窗口里,输入如下命令:signcode /spc c:\FortuneAge.spc /k WHX c:\scan.cab。至此,已经对成功对can.cab文件签名。可以查看文件的属性,查看数字签名。

  4.在WEB上的调用
在HTML页面中使用ActiveX控件包含三个基本操作:将控件放入HTML中;将该控件下载给用户;在用户机器上安装该控件。如果只是针对IE用户,在HTML中插入ActiveX控件就比较简单;如果同时兼顾IE和Netscape用户,则要做更多工作。大家知道,HTML文件由文本和各种标志 (tags)组成,ActiveX 控件对于IE在HTML中的标志是<OBJECT>,该标记有几个重要的参数特性,它们是: 
1.ID:为控件提供一个标识名称,为HTML代码提供一种访问该控件的方式。 
2.CLASSID:是该控件唯一的UUID,告诉IE装入哪个对象。如果使用已经开发好的控件,它的CLASSID可以通过调用Win95或NT下的应用Regedit来查找。从开始菜单中运行该程序,展开HKEY_CLASSES_ROOT项,可以看到按字母顺序排列的注册表,找到需要使用的控件名,例如WClnt,展开时可看到一个CLSID文件夹,里面就是该控件的CLASSID。 
如果是自己用VC开发控件,该UUID可以在ActiveX控件项目中的ODL(对象描述库)文件中找到;通过查看控件的类信息注释来定位特定控件的UUID,例如,要找到CMyControl控件的UUID,则需要找到以下代码: 
// Class information for CMyControl 
[uuid (051C4748-1262-11D2-87C1-00A024D948FB), 
licensed, 
helpstring("CmyControl Control"), control ] 
uuid后面括号中的内容就是该控件的UUID。 
3.CODEBASE:如果在用户机器上没有控件的当前版本,该参数告诉用户浏览器在哪里可找到要下载的控件和最新版本号.当控件作了修改后,可以更改版本号强制用户重新下载。 
4.PARAM:该标记用于设置控件的初始属性值,它有两个特性:Name和Value,即属性名称和属性值。 
此外还有一些标记,如:Width表示该控件所占的宽度,Height表示高度等,总体来说,这样一个插入控件的HTML代码和插入Java Applet的HTML代码非常相似。 
下面是一个嵌有ActiveX控件的HTML代码示例: 
<OBJECT ID="CMyControl" CLASSID="clsid:051C4748-1262-11D2-87C1-00A024D948FB" CODEBASE="http://www.mysite.com.cn/ocxdir/mycontrol.ocx#version=1,0,0,1" WIDTH=400 HEIGHT=200 ALIGN=center HSPACE=0 VSPACE=0 > </OBJECT> 
CODEBASE的设置中,若CAB文件与该WEB文件保存在同一目录下,只需写其文件名即可,即CODEBASE="mycontrol.ocx#version=1,0,0,1";#号代表此控件的版本,如果版本不同,客户端的浏览器自然会下载更新。
如果希望控件还能在Netscape中运行,除了Netscape需加装插件外,HTML也要加一些附加标记,下面的例子中EMBED段就是为 Netscape加上的。如果使用MFC开发OCX控件,则少数用户第一次访问时除了下载OCX文件外,还要下载相应的MFC DLL,下载量变大,这时可将相关文件在服务器端打包成可以在客户端自解压安装的CAB文件。经过修改后的HTML代码段如下: 
<ALIGN="CENTER" CLASSID="clsid: 
7BCA18C6-2178-11D2-87C1-00A024D948FB" 
WIDTH="1200" HEIGHT="900" ID="marquee" 
CODEBASE="http://218.168.188.188/scadaweb/ 
WClnt.cab#version=1,0,0,1"> 
<EMBED ALIGN="CENTER"CLASSID="clsid:7BCA18C6- 2178-11D2-87C1-00A024D948FB" 
WIDTH="1200" HEIGHT="900" ID="marqueequot;" 
CODEBASE="http://218.168.188.188/scadaweb/ 
WClnt.OCX#version=1,0,0,1" 
TYPE="application/oleobject" >

  5.结束语
在WEB中开发控件的大致流程已公布,但它的设计和实现方法多种多样。WEB控件的制作的针对方向为在客户端的服务,如客户端打印、扫描等功能。若果是提供服务器端的控件调用,可以研究一下WEBSERVER。

posted @ 2011-05-19 14:45  ttjia  阅读(3754)  评论(0编辑  收藏  举报