目的:
1.?
依賴
MFC
庫(kù)或
ATL
庫(kù)等開(kāi)發(fā)的
ActiveX
控件要正常的運(yùn)行必須依賴這些庫(kù)。但是你不能保證你用戶的機(jī)器上裝有與你開(kāi)發(fā)環(huán)境相同的庫(kù),所以,當(dāng)你發(fā)行一個(gè)
ActiveX
控件,你必須要包證這些依賴庫(kù)的存在。
2.?
在網(wǎng)絡(luò)上運(yùn)行的
ActiveX
控件,必須要保證你發(fā)行的控件小的足以讓用戶忍受下載的時(shí)間,當(dāng)然是越小越好。控件本身你會(huì)發(fā)現(xiàn)微不足道,但你不得不還要考慮到他支持庫(kù)的空間,你會(huì)發(fā)現(xiàn)的加上它的支持庫(kù),你的控件會(huì)變的臃腫不堪,所以你必須要找到一種方法為你的控件減減肥。
3.?
得到控件后,使用前當(dāng)然還要給它注冊(cè),但是你別忘了,還有他那些個(gè)依賴庫(kù)的注冊(cè)工作等著你耐心的一個(gè)個(gè)的
regsvr32
掉。
哦,天哪,用戶只是想隨便的瀏覽一個(gè)網(wǎng)頁(yè)而已卻要他做這么麻煩的工作,誰(shuí)愿意做,我們上帝們才不會(huì)關(guān)心你這些技術(shù)細(xì)節(jié),他們希望在電腦前輕點(diǎn)下鼠標(biāo)就一切正常,他們要的是自動(dòng)化!而這一切,
Cab
能幫你完全解決。
原理:
通過(guò)高壓縮技術(shù)(比
ZIP
壓縮度還高
3
成)——打包成
Cab
壓縮文件。當(dāng)用戶第一次瀏覽你控件所在的網(wǎng)頁(yè)時(shí),它會(huì)自動(dòng)提示控件下載,下載后會(huì)根據(jù)
cab
文件中的
*.inf
文本文件的來(lái)尋找你電腦的上相應(yīng)的
DLL
(控件依賴庫(kù)及控件本身,
ocx
本就是一種特殊的
DLL
)是否注冊(cè)過(guò),如果沒(méi)有,會(huì)自動(dòng)幫你注冊(cè),然后控件既可以正常使用。
(注:關(guān)于
cab
壓縮技術(shù),請(qǐng)參考
MSDN
或是網(wǎng)上相關(guān)搜索)
創(chuàng)建
cab
文件:
1.?
創(chuàng)建
INF
文件。
INF
文件是一個(gè)文本文件,用以指定為控件的運(yùn)行而需要顯示或下載的文件(如
DLL
文件或其他
OCX
文件)。
INF
文件使您得以將所有所需的文件捆綁在一個(gè)壓縮的
CAB
文件中。默認(rèn)情況下,版本號(hào)同用戶硬盤(pán)上的現(xiàn)有文件相同的文件不下載。有關(guān)
INF
文件及其選項(xiàng)的更多信息,包括如何創(chuàng)建與平臺(tái)無(wú)關(guān)的
INF
文件,請(qǐng)參見(jiàn)
Platform SDK
文檔中的關(guān)于
INF
文件和使用
INF
文件(在
MSDN Library/Setup
和
System Administration/Setup/Setup API/Overview/Setup Applications
目錄下)。
舉例來(lái)說(shuō),下面的
INF
文件用于為
AxYourControl
控件創(chuàng)建
CAB
文件。
AxYourControl
是由某一庫(kù)支持開(kāi)發(fā)的(
MFC
,
ATL
或其他),假設(shè)他所支持庫(kù)的主要由
Need1.dll
,
Need2.dll
,
Need3.dll
三個(gè)
DLL
庫(kù)(具體有哪些庫(kù)文件根據(jù)情況查閱
MSDN
相關(guān)內(nèi)容)。
; Sample INF file for AxYourControl.OCX
[version]
signature="$CHINA$"
AdvancedINF=2.0?
?
[Add.Code]
AxYourControl.ocx= AxYourControl.ocx
Need1.dll= Need1.dll
Need2.dll= Need2.dll
Need3.dll= Need3.dll
?
; needed DLL
[Need1.dll]
file-win32-x86=thiscab
FileVersion=2,00,0,7024
DestDir=11
RegisterServer=yes
?
; needed DLL
[Need2.dll]
file-win32-x86=thiscab
FileVersion=2,00,0,7024
DestDir=11
RegisterServer=yes
?
; needed DLL
[Need3.dll]
file-win32-x86=thiscab
FileVersion=2,00,0,7024
DestDir=11
RegisterServer=yes
?
[AxYourControl.ocx]
file-win32-x86=thiscab
clsid={4CBBC676-507F-11D0-B98B-000000000000}
FileVersion=1,0,0,1
RegisterServer=yes?
; end of INF file
此 INF 文件指定需要在系統(tǒng)上安裝給定版本的 Need1.DLL, Need2.DLL和Need3.DLL。如果這些DLL尚未存在于系統(tǒng)中,它將從用此 INF 創(chuàng)建的 CAB 文件中下載。“thiscab”是一個(gè)關(guān)鍵字,表示 CAB 包含此 INF。也可通過(guò)指定一條絕對(duì)或相對(duì)路徑,從一個(gè) HTTP 位置下載所需的 DLL,例如:
??? file-win32-x86=http://example.microsoft.com/mydir/NEEDED.DLL
關(guān)鍵字“file-win32-x86”將平臺(tái)標(biāo)識(shí)為 x86 特定的。
可通過(guò)在 Windows 資源管理器中的文件上單擊鼠標(biāo)右鍵來(lái)獲取文件的版本號(hào)。從顯示的列表中選擇“屬性”,然后在顯示的對(duì)話框中選擇“版本”選項(xiàng)卡。有時(shí)需要在文件版本中額外插入一個(gè) 0。例如,在對(duì)話框中 ATL.DLL 的版本號(hào)顯示為 2.00.7024。而在 INF 文件中,這變?yōu)?span lang="EN-US"> 2, 00, 0, 7024。
“DestDir”
是將要加載文件的目錄所在的位置:11 指定系統(tǒng)目錄為 WINDOWS/SYSTEM 或 WINNT/SYSTEM32;10 指定 Windows 目錄、WINDOWS 或 WINNT。如果未指定任何 DestDir(典型情況),則代碼安裝在固定的 OCCACHE 目錄中。
“clsid”
是將要安裝的控件的 CLSID。
2.?
運(yùn)行
CABARC
實(shí)用工具。
Cabarc.exe
是微軟的一個(gè)
cab
文件制作工具。你可以到微軟的官方網(wǎng)站下載
CABIN SDK
工具包。下載后解壓安裝,在其目錄下有一個(gè)
Bin
目錄下可以找到。
?????
應(yīng)在包含源文件的目錄下運(yùn)行
CABARC
。在命令行上,按源文件出現(xiàn)在
INF
中的順序排列它們,并將
INF
文件放在最后。例如,若要從上面的
INF
文件生成
AxYourControl
控件的
CAB
文件,請(qǐng)使用下面的命令:
…\BIN\CABARC -s 6144 n
AxYourControl
.CAB
Need1
.DLL
Need2
.DLL
Need3
.DLL
AxYourControl
.OCX
AxYourControl
.INF
-s
選項(xiàng)在壓縮文件中保留
用于代碼簽名
的空間。
n
命令指定希望創(chuàng)建
CAB
文件。有關(guān)
CABARC
命令和選項(xiàng)的列表,請(qǐng)?jiān)诿钚猩蟽H鍵入
CABARC
:
…\BIN\
CABARC
其他的一些補(bǔ)充:
1.?
需要
MFC
控件中包含的
DLL
文件有
MSVCRT.DLL
、
MFC42.DLL
和
OLEPRO32.DLL
,其中
MFC42.DLL
視你開(kāi)發(fā)環(huán)境的
MFC
版本所定,例如本人是在
vc7
環(huán)境下開(kāi)發(fā)控件的,所以,應(yīng)該為
MFC71.DLL
。
2.?
為
ActiveX
空間創(chuàng)建
cab
文件還有一個(gè)重要的話題就是
將其打包為簽名壓縮
(CAB)
文件。簽名文件使用戶可以放心地下載代碼安全的控件。關(guān)于這個(gè)話題,需要申請(qǐng)發(fā)行證書(shū),詳細(xì)情況可參見(jiàn)
MSDN
:
ms-help://MS.MSDNQTR.2003FEB.2052/vccore/html/Creating_Signed_CAB_Files_for_MFC_and_ATL_Controls.htm
3.?
關(guān)于在創(chuàng)建
INF
時(shí)
DLL
的版本,你可以鼠標(biāo)右擊點(diǎn)出他的屬性對(duì)話框,在版本一欄就可以看到了,注意,填寫(xiě)時(shí),版本號(hào)之間的“
.
”號(hào)變換為“,”。
posted on 2007-01-08 17:34
我風(fēng) 閱讀(474)
評(píng)論(0) 編輯 收藏 引用