用VB将第三方控件打成CAB包(在WEB页面上使用)

用 VB 将第三方控件打成 CAB 包(在 WEB 页面上使用)

由于工作的需要,笔者需要在 WEB 页面上显示 CAD 文件(在客户机器上不装 CAD )。由于时间紧迫,现写控件根本来不及,没办法在网上搜寻了一圈。找到了一个软件,大小大概有 8 兆左右。可以用来浏览 DWG 类型的文件。用了一下,发现其用的是一个 DLL 类型的控件,并带有两个附属的 DLL 文件。

如果要在 WEB 页面上使用控件,则控件需要打成 CAB 类型的包。上网找了一个打 CAB 包的工具,名字叫 IExpress 。不过如果用这个工具打包需要手工编写 INF 文件, INF 文件的结构比较复杂,手工编写容易出现错误。想了一下,觉得 VB 自带的打包工具可以制作 CAB 文件包。不过 VB 的打包工具开始必须选择一个 VB 的工程。所以用 VB 建了一个跟控件名称一样的工程,编译了一下,然后用 VB 自带的工具进行打包,打包的类型选择 Internet 类型的安装包。到选择文件这一步的时候,要将多余的文件去掉,因为这个第三方控件不是 VB 编写的,所以根本不用带 VB 的运行库。将第三方控件的主控件 DLL 和两个附属的 DLL 都加到包中,然后开始打包。

包打完之后写了个测试页,在本机上试了一下没有问题(因为本机已经安装了控件),所以在其他的机器上测试了一下,不能正常安装控件,页面上显示一个红叉。查看 IE 临时文件夹下的控件安装日志文件,内容显示控件不能正常注册。到网上查找了一些资料,没有找到原因。后来用 VC 自带的 Dependency Walker 工具查看了一下控件的 DLL ,发现里边还包含了另外三个 DLL ,分别为: msvcr71.dll 、 msvcp71.dll 、 mfc71.dll 。将这三个文件也加进了包里,测试之后,一切正常。

在 WEB 页面上使用控件的脚本如下:

 1<html>
 2<head>
 3<title>BravaACX.CAB</title>
 4</head>
 5<body>
 6<!--  如果这页上的任何控件需要授权,您必须 
 7
 8创建一个授权包文件。  运行  LPK_TOOL.EXE  来创建 
 9
10要求的  LPK  文件。  LPK_TOOL.EXE  将从  ActiveX SDK  中找到, 
11
12http://www.microsoft.com/intdev/sdk/sdk.htm.  如果您有  Visual 
13
14Basic 6.0 CD,  您可以在  \Tools\LPK_TOOL  目录下找到它。 
15
16下面是对象标记的例子: 
17
18<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
19
20<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
21
22</OBJECT>
23
24\-->
25<object classid="CLSID:1BE73243-A85F-4385-939D-14D4845A286A" codebase="BravaACX.CAB#version=5,1,0,5" height="60%" id="ctlBravaACXView" width="60%">
26<param name="Filename" value="db_samp.dwg"/>
27</object>
28</body>
29</html>

打包 CAB 控件的 INF 文件内容为:

;BravaACX.OCX 的 INF 文件

;DestDir 可以为 10 则在 Windows 目录,为 11 则在 Windows\System(32) 目录,或为空则在 Occache 目录。

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[DefaultInstall]

CopyFiles=install.files

RegisterOCXs=RegisterFiles

[RInstallApplicationFiles]

CopyFiles=install.files

RegisterOCXs=RegisterFiles

[DestinationDirs]

install.files=11

[SourceDisksNames]

1=%DiskName%,BravaACX.CAB,1

[Add.Code]

BravaACX.dll=BravaACX.dll

Autorec.dll=Autorec.dll

BACXView.ini=BACXView.ini

Dwg2DL.dll=Dwg2DL.dll

myrdrv.ini=myrdrv.ini

MFC71.dll=MFC71.dll

msvcr71.dll=msvcr71.dll

msvcp71.dll=msvcp71.dll

[install.files]

BravaACX.dll=BravaACX.dll

Autorec.dll=Autorec.dll

BACXView.ini=BACXView.ini

Dwg2DL.dll=Dwg2DL.dll

myrdrv.ini=myrdrv.ini

MFC71.dll=MFC71.dll

msvcr71.dll=msvcr71.dll

msvcp71.dll=msvcp71.dll

[SourceDisksFiles]

BravaACX.dll=1

Autorec.dll=1

BACXView.ini=1

Dwg2DL.dll=1

myrdrv.ini=1

MFC71.dll=1

msvcr71.dll=1

msvcp71.dll=1

[BravaACX.dll]

file-win32-x86=thiscab

RegisterServer=yes

clsid={1BE73243-A85F-4385-939D-14D4845A286A}

DestDir=11

FileVersion=5,1,0,5

[Autorec.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=1,3,0,43

[BACXView.ini]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=0,0,0,0

[Dwg2DL.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=1,3,0,47

[myrdrv.ini]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=0,0,0,0

[MFC71.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=7,10,3077,0

[msvcr71.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=7,10,3052,4

[msvcp71.dll]

file-win32-x86=thiscab

RegisterServer=no

DestDir=11

FileVersion=7,10,3077,0

[RegisterFiles]

%11%\BravaACX.dll

作者:崔占民

EMAIL : [email protected]

Published At
Categories with Web编程
Tagged with
comments powered by Disqus