注冊會員,創建你的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頁面上使用控件的腳本如下:
<html>
<head>
<title>bravaacx.cab</title>
</head>
<body>
<!-- 如果這頁上的任何控件需要授權,您必須
創建一個授權包文件。 運行 lpk_tool.exe 來創建
要求的 lpk 文件。 lpk_tool.exe 將從 activex sdk 中找到,
http://www.microsoft.com/intdev/sdk/sdk.htm. 如果您有 visual
basic 6.0 cd, 您可以在/tools/lpk_tool 目錄下找到它。
下面是對象標記的例子:
<object classid="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<param name="lpkpath" value="lpkfilename.lpk">
</object>
-->
<object id="ctlbravaacxview" classid="clsid:1be73243-a85f-4385-939d-14d4845a286a"
codebase="bravaacx.cab#version=5,1,0,5" width="60%" height="60%">
<param name="filename" value="db_samp.dwg">
</object>
</body>
</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]