如何在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 和更早版本,使用:Olepro32.dll 4,1,0,6038 Mfc40.dll 4,1,0,6139 Msvcrt40.dll 4,10,0,6038 VC 4.2b 和更早版本,使用:Olepro32.dll 4.2,0.6068 Mfc42.dll 4,2,0,6256 Msvcrt.dll 4,20,0,6164 VC 5.0,使用:Olepro32.dll 5.0.4055.1 Mfc42.dll 4.21,0.7022 Msvcrt.dll 5.0,0.7022 VC 5.0sp1,使用:Olepro32.dll 5.0.4055.1 Mfc42.dll 4.21,0.7160 Msvcrt.dll 5.0,0.7128 VC 5.0sp2,使用:Olepro32.dll 5.0.4055.1 Mfc42.dll 4.21,0.7160 Msvcrt.dll 5.0,0.7128 VC 5.0sp3,使用:Olepro32.dll 5.0.4230.1 Mfc42.dll 4.21,0.7303 Msvcrt.dll 5.0,0.7303 VC 6.0,使用: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 組件下載是如何實現的?) |