如何在VC中利用生成控件时生成CAB文件
VC不象VB有PDWizard,需要手工生成CAB文件,可以参考“微软的Knowledge Base的文章:“Q167158 WTO: Packaging MFC Controls for Use Over the Internet”。 下面是全文:
HOWTO:为通过 Internet 使用的 MFC 控件打包
察看这篇文章对应的产品
本文的发布号曾为 CHS167158
本页内容
概要
在使用 OBJECT 标记将 ActiveX 控件嵌入 Web 页中时,用于指定下载地址的 CODEBASE 属性可以指向 .cab 文件。建议使用这种方法包装 MFC ActiveX 控件。在 CAB 文件中包装 MFC ActiveX 控件时,允许控件中包含 .inf 文件以便对 ActiveX 控件的安装过程进行控制;允许对相关 DLL 进行命名并提供地址;允许代码签名以及自动压缩代码以更快地进行下载。
更多信息
ActiveX 控件是使用 OBJECT 标记嵌入到 Web 页中的。OBJECT 标记的 CODEBASE 属性指定从中下载控件的地址。CODEBASE 可以成功地指向一组不同的文件类型。
例如,CODEBASE 可以直接指向 .ocx 文件(如下所示): 因为这只下载和安装 .ocx 文件,所以这种解决方法取决于客户机上已有的任何必要的支持 DLL。在多数情况下,不应假设客户端上已有这些 DLL,也不应假设 DLL 的版本是正确的。
另一种可供选择的方法是 CODEBASE 指向 .inf 文件,例如: .inf 文件控制 .ocx 文件及其支持文件的安装。不推荐使用这种方法,因为这种方法不能对 .inf 文件进行签名(请参见"参考资源"一节以获得有关代码签名的参考资料)。
最好的解决方法是 CODEBASE 指向 CAB 文件。在使用这种方法时,可以引用支持的 DLL 并对 CAB 文件进行签名。 备注:如果遵守以下引用 MFC DLL 的说明,当客户端上已有 MFC DLL 时,则不对它们进行下载。CODEBASE 行类似如下内容: 注意,其中的 #Version 信息适用于 OBJECT 标记的 CLASSID 参数所指定的控件版本。
Cab 包装概述在 Cabinet 软件开发工具包(也叫做 Cabinet SDK 或 CAB 开发工具包)中,可以找到构造 CAB (.cab) 文件所需的工具。请参阅以下 Microsoft Web 站点:
Microsoft Cabinet SDK
CODEBASE 指向的 CAB 文件应当包含 .ocx 文件和用于控制 ActiveX 控件安装的 .inf 文件。在此 CAB 文件中,不应包含系统中已有的相关 DLL(如 MFC DLL)。相反,MFC DLL 和其他相关 DLL 应当包装在单独的 CAB 文件中,并且可以由控件的 .inf 文件引用。以下示例说明如何包装 MFC Spindial 示例控件。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncabsdk/html/cabdl.asp 将 Spindial 控件包含到 Web 页中的 OBJECT 标记类似以下内容: 在此例中,Spindial.cab 必须包含两个文件:Spindial.ocx 和 Spindial.inf。创建此 CAB 文件的命令类似以下内容(取决于安装 Cabinet 开发工具包的路径):
C:\CabDevKit\cabarc.exe N spindial.cab spindial.ocx spindial.inf以下是有关 MFC Spindial 控件的示例文件 .inf。可以修改此 .inf 文件以下载任何 MFC ActiveX 控件,即将 Spindial 信息更改为所需的 MFC ActiveX 控件信息。请参见以下注释。 根据控件以及创建控件所使用的 MFC 版本,需要对此 .inf 文件的以下部分加以修改:
VC 4.1 和更早版本,使用:
http://activex.microsoft.com/controls/vc/mfc40.cab
Olepro32.dll 4,1,0,6038 Mfc40.dll 4,1,0,6139 Msvcrt40.dll 4,10,0,6038 VC 4.2b 和更早版本,使用:
http://activex.microsoft.com/controls/vc/mfc42.cab
Olepro32.dll 4.2,0.6068 Mfc42.dll 4,2,0,6256 Msvcrt.dll 4,20,0,6164 VC 5.0,使用:
http://activex.microsoft.com/controls/vc/mfc42.cab
Olepro32.dll 5.0.4055.1 Mfc42.dll 4.21,0.7022 Msvcrt.dll 5.0,0.7022 VC 5.0sp1,使用:
http://activex.microsoft.com/controls/vc/mfc42.cab
Olepro32.dll 5.0.4055.1 Mfc42.dll 4.21,0.7160 Msvcrt.dll 5.0,0.7128 VC 5.0sp2,使用:
http://activex.microsoft.com/controls/vc/mfc42.cab
Olepro32.dll 5.0.4055.1 Mfc42.dll 4.21,0.7160 Msvcrt.dll 5.0,0.7128 VC 5.0sp3,使用:
http://activex.microsoft.com/controls/vc/mfc42.cab
Olepro32.dll 5.0.4230.1 Mfc42.dll 4.21,0.7303 Msvcrt.dll 5.0,0.7303 VC 6.0,使用:
http://activex.microsoft.com/comtrols/vc/mfc42.cab
Olepro32.dll 5.0,0,6038 Mfc42.dll 6.0,0,6256 Msvcrt.dll 6.0.8168.0 注意,4.2 和 6.0 之间的所有 MFC 版本均使用 Mfc42.cab。此 .cab 文件总是包含最新版本的 DLL,因为它们是向后兼容的。如果不使用更高的 MFC 版本进行编译,则您可能不想指定最新的文件版本。这样做可能会导致下载不必要的 MFC DLL。 参考
有关更多信息,请访问下面的 Microsoft Developer Network (MSDN) Web 站点:
包装 ActiveX 控件
http://msdn.microsoft.com/library/default.asp?url=/workshop/components/activex/packaging.asp?frame=true
ActiveX 控件的安全初始化和脚本编写
http://msdn.microsoft.com/library/default.asp?url=/workshop/components/activex/safety.asp?frame=true#iobjsafe
使用 Microsoft Authenticode 技术进行代码签名
http://msdn.microsoft.com/library/default.asp?url=/workshop/security/authcode/authenticode.asp
使用 ActiveX 控件自动完成 Web 页
有关其他信息,请单击下列文章编号,查看相应的 Microsoft 知识库文章:
http://msdn.microsoft.com/library/default.asp?url=/workshop/components/activex/tutorial.asp?frame=true
264570 INFO:WebCast:How Does Internet Component Download Work?(WebCast:Internet 组件下载是如何实现的?)
|