• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            如何在VC中利用生成控件時生成CAB文件

            Posted on 2009-09-01 14:42 S.l.e!ep.¢% 閱讀(1214) 評論(0)  編輯 收藏 引用 所屬分類: COM

            如何在VC中利用生成控件時生成CAB文件

            VC不象VB有PDWizard,需要手工生成CAB文件,可以參考“微軟的Knowledge Base的文章:“Q167158 WTO: Packaging MFC Controls for Use Over the Internet”。 下面是全文:
             

            HOWTO:為通過 Internet 使用的 MFC 控件打包

            文章 ID : 167158
            最后更新日期 : 2004年1月21日
            版本 : 2.0
            本文的發布號曾為 CHS167158

            概要

            在使用 OBJECT 標記將 ActiveX 控件嵌入 Web 頁中時,用于指定下載地址的 CODEBASE 屬性可以指向 .cab 文件。建議使用這種方法包裝 MFC ActiveX 控件。在 CAB 文件中包裝 MFC ActiveX 控件時,允許控件中包含 .inf 文件以便對 ActiveX 控件的安裝過程進行控制;允許對相關 DLL 進行命名并提供地址;允許代碼簽名以及自動壓縮代碼以更快地進行下載。
             

            更多信息

            ActiveX 控件是使用 OBJECT 標記嵌入到 Web 頁中的。OBJECT 標記的 CODEBASE 屬性指定從中下載控件的地址。CODEBASE 可以成功地指向一組不同的文件類型。

            例如,CODEBASE 可以直接指向 .ocx 文件(如下所示):
            CODEBASE="http://example.microsoft.com/somecontrol.ocx#version=4,70,0,1086"
            因為這只下載和安裝 .ocx 文件,所以這種解決方法取決于客戶機上已有的任何必要的支持 DLL。在多數情況下,不應假設客戶端上已有這些 DLL,也不應假設 DLL 的版本是正確的。

            另一種可供選擇的方法是 CODEBASE 指向 .inf 文件,例如:
            CODEBASE="http://example.microsoft.com/doyoutrustme.inf"
            .inf 文件控制 .ocx 文件及其支持文件的安裝。不推薦使用這種方法,因為這種方法不能對 .inf 文件進行簽名(請參見"參考資源"一節以獲得有關代碼簽名的參考資料)。

            最好的解決方法是 CODEBASE 指向 CAB 文件。在使用這種方法時,可以引用支持的 DLL 并對 CAB 文件進行簽名。

            備注:如果遵守以下引用 MFC DLL 的說明,當客戶端上已有 MFC DLL 時,則不對它們進行下載。CODEBASE 行類似如下內容:
            CODEBASE="http://example.microsoft.com/acontrol.cab#version=1,2,0,0"
            注意,其中的 #Version 信息適用于 OBJECT 標記的 CLASSID 參數所指定的控件版本。

            Cab 包裝概述

            在 Cabinet 軟件開發工具包(也叫做 Cabinet SDK 或 CAB 開發工具包)中,可以找到構造 CAB (.cab) 文件所需的工具。請參閱以下 Microsoft Web 站點: CODEBASE 指向的 CAB 文件應當包含 .ocx 文件和用于控制 ActiveX 控件安裝的 .inf 文件。在此 CAB 文件中,不應包含系統中已有的相關 DLL(如 MFC DLL)。相反,MFC DLL 和其他相關 DLL 應當包裝在單獨的 CAB 文件中,并且可以由控件的 .inf 文件引用。以下示例說明如何包裝 MFC Spindial 示例控件。

            將 Spindial 控件包含到 Web 頁中的 OBJECT 標記類似以下內容:
            <OBJECT ID="Spindial1" WIDTH=200 HEIGHT=200
            CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
            CODEBASE="http://example.microsoft.com/spindial.cab#Version=1,0,0,001">
            
            <PARAM NAME="_Version" VALUE="65536">
            <PARAM NAME="_ExtentX" VALUE="2646">
            <PARAM NAME="_ExtentY" VALUE="1323">
            <PARAM NAME="_StockProps" VALUE="0">
            <PARAM NAME="NeedlePosition" VALUE="2">
            </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 控件信息。請參見以下注釋。
            ; ========================= spindial.inf ========================
            
            ; This .inf file will control the installation of the MFC Spindial
            ; control.This control has been compiled with Visual C++ version 4.2.
            ; The FileVersion tags in the dependent DLLs section on this file
            ; reflect this requirement.
            
            [Version]
            ; version signature (same for both NT and Win95) do not remove
            signature="$CHICAGO$"
            AdvancedINF=2.0
            
            [Add.Code]
            spindial.ocx=spindial.ocx
            ; These are the necessary supporting DLLs for MFC 4.2 ActiveX Controls
            mfc42.dll=mfc42.dll
            msvcrt.dll=msvcrt.dll
            olepro32.dll=olepro32.dll
            ; thiscab is a keyword which, in this case, means that Spindial.ocx
            ; can be found in the same .cab file as this .inf file
            ; file-win32-x86 is an x86 platform specific identifier
            ; See the ActiveX SDK - ActiveX Controls - Internet Component Download -
            ; Packaging component code for automatic download
            
            [spindial.ocx]
            file-win32-x86=thiscab
            ; *** add your controls CLSID here ***
            clsid={06889605-B8D0-101A-91F1-00608CEAD5B3}
            ; Add your ocx's file version here.
            FileVersion=1,0,0,001
            RegisterServer=yes
            
            ; dependent DLLs
            [msvcrt.dll]
            ; This is an example of conditional hook.The hook only gets processed
            ; if msvcrt.dll of the specified version is absent on client machine.
            FileVersion=4,20,0,6164
            hook=mfc42installer
            
            [mfc42.dll]
            FileVersion=4,2,0,6256
            hook=mfc42installer
            
            [olepro32.dll]
            FileVersion=4,2,0,6068
            hook=mfc42installer
            
            [mfc42installer]
            file-win32-x86=VALUE=http://activex.microsoft.com/controls/vc/mfc42.cab
            ; If dependent DLLs are packaged directly into the above cabinet file
            ; along with an .inf file, specify that .inf file to run as follows:
            ;InfFile=mfc42.inf
            ; The mfc42.cab file actually contains a self extracting executable.
            ; In this case we specify a run= command.
            run=%EXTRACT_DIR%\mfc42.exe
            
            ; ====================== end of spindial.inf =====================
            根據控件以及創建控件所使用的 MFC 版本,需要對此 .inf 文件的以下部分加以修改:
            ?應該將對 Spindial 的任何引用更改為控件的名稱。這包括注釋和以下內容:
            spindial.ocx=spindial.ocx
            [spindial.ocx]
            ?應該將以下內容更改為控件的正確 CLSID 和文件版本(FileVersion):
            clsid={06889605-B8D0-101A-91F1-00608CEAD5B3}
            FileVersion=1,0,0,001
            可以從上述控件的 ODL 文件中獲得控件的 CLSID。CLSID 與控件的共類 (coclass) 有關。例如,上述 CLSID 是從 Spindial.odl 的以下部分中獲得的:
            [ uuid(06889605-B8D0-101A-91F1-00608CEAD5B3),
            
            helpstring("Spindial Control"), control ]
            coclass Spindial
            可以從控件的版本資源中獲得控件的文件版本 (FileVersion)。當版本資源對任何文件都適用時,可以使用 Visual Studio 打開文件(此例中為 Spindial.ocx)版本資源以獲得文件版本。從文件菜單中,選擇打開,然后單擊打開為:資源。打開 Version 資源;所需的文件版本就在 FILEVERSION 后面列出。
            ?需要做的最后更改是,輸入每個 MFC DLL([mfc42.dll]、[olepro32.dll] 和 [mscvrt.dll])的正確文件版本。注意,如果使用的是 Visual C++ 4.1 或更早版本,則需要將對 Mfc42.dll 的任何引用更改為 Mfc40.dll,將對 Msvcrt.dll 的任何引用更改為 Msvcrt40.dll。
            應當使用以下文件版本:

            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 站點: 有關其他信息,請單擊下列文章編號,查看相應的 Microsoft 知識庫文章:
            264570 INFO:WebCast:How Does Internet Component Download Work?(WebCast:Internet 組件下載是如何實現的?)
            久久精品国产男包| 人妻无码久久精品| 国产AⅤ精品一区二区三区久久 | 国产精品久久久久久久午夜片| 伊人久久国产免费观看视频| 久久人人爽人人爽人人片AV麻烦 | 久久夜色精品国产亚洲| 久久人人青草97香蕉| 久久久精品久久久久久| 伊人久久精品无码av一区| 亚洲综合精品香蕉久久网| 久久久久久久精品成人热色戒| 欧美日韩中文字幕久久久不卡| 久久久久婷婷| 国内高清久久久久久| 狠狠色婷婷久久一区二区| 人妻精品久久无码区| 久久免费国产精品一区二区| 精品久久久久久亚洲| 久久综合狠狠综合久久97色| 国产麻豆精品久久一二三| 久久综合狠狠综合久久97色| 久久精品一区二区影院| 无码8090精品久久一区| 久久精品国产日本波多野结衣| 久久亚洲中文字幕精品有坂深雪| 国产一级持黄大片99久久| 2020最新久久久视精品爱| 久久久久久久综合狠狠综合| 久久久无码精品亚洲日韩京东传媒| 婷婷五月深深久久精品| 久久精品日日躁夜夜躁欧美| 三上悠亚久久精品| 狠狠人妻久久久久久综合| 欧美激情精品久久久久| 欧美麻豆久久久久久中文| 久久久国产打桩机| 久久国产高清一区二区三区| 午夜欧美精品久久久久久久| 国内精品久久久久久不卡影院| 亚洲AV无码久久|