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。