• <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.¢%

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

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

            Posted on 2009-09-01 14:42 S.l.e!ep.¢% 閱讀(1213) 評論(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
            本文的發(fā)布號曾為 CHS167158

            概要

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

            更多信息

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

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

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

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

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

            Cab 包裝概述

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

            將 Spindial 控件包含到 Web 頁中的 OBJECT 標(biāo)記類似以下內(nèi)容:
            <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。創(chuàng)建此 CAB 文件的命令類似以下內(nèi)容(取決于安裝 Cabinet 開發(fā)工具包的路徑):
            C:\CabDevKit\cabarc.exe N spindial.cab spindial.ocx spindial.inf
            以下是有關(guān) 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 =====================
            根據(jù)控件以及創(chuàng)建控件所使用的 MFC 版本,需要對此 .inf 文件的以下部分加以修改:
            ?應(yīng)該將對 Spindial 的任何引用更改為控件的名稱。這包括注釋和以下內(nèi)容:
            spindial.ocx=spindial.ocx
            [spindial.ocx]
            ?應(yīng)該將以下內(nèi)容更改為控件的正確 CLSID 和文件版本(FileVersion):
            clsid={06889605-B8D0-101A-91F1-00608CEAD5B3}
            FileVersion=1,0,0,001
            可以從上述控件的 ODL 文件中獲得控件的 CLSID。CLSID 與控件的共類 (coclass) 有關(guān)。例如,上述 CLSID 是從 Spindial.odl 的以下部分中獲得的:
            [ uuid(06889605-B8D0-101A-91F1-00608CEAD5B3),
            
            helpstring("Spindial Control"), control ]
            coclass Spindial
            可以從控件的版本資源中獲得控件的文件版本 (FileVersion)。當(dāng)版本資源對任何文件都適用時,可以使用 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。
            應(yīng)當(dāng)使用以下文件版本:

            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 版本進(jìn)行編譯,則您可能不想指定最新的文件版本。這樣做可能會導(dǎo)致下載不必要的 MFC DLL。
             

            參考

            有關(guān)更多信息,請訪問下面的 Microsoft Developer Network (MSDN) Web 站點(diǎn):
            使用 Microsoft Authenticode 技術(shù)進(jìn)行代碼簽名
            http://msdn.microsoft.com/library/default.asp?url=/workshop/security/authcode/authenticode.asp
            有關(guān)其他信息,請單擊下列文章編號,查看相應(yīng)的 Microsoft 知識庫文章:
            264570 INFO:WebCast:How Does Internet Component Download Work?(WebCast:Internet 組件下載是如何實現(xiàn)的?)
            香蕉久久夜色精品升级完成| 久久精品国产亚洲av麻豆色欲| 国产美女久久精品香蕉69| 国产精品成人久久久| 久久精品无码专区免费| 国产无套内射久久久国产| 99久久精品国产麻豆| 国产亚洲精久久久久久无码| 久久久女人与动物群交毛片| 精品综合久久久久久888蜜芽| 国内精品伊人久久久久av一坑| 久久久一本精品99久久精品88| 久久天天躁狠狠躁夜夜躁2O2O| 麻豆一区二区99久久久久| 国产精品99久久免费观看| 久久精品国内一区二区三区| 国产AⅤ精品一区二区三区久久| 国产高潮国产高潮久久久91 | 久久精品综合网| 一本色道久久88综合日韩精品 | 婷婷久久综合| 久久丫忘忧草产品| 无码人妻久久久一区二区三区 | 久久久精品波多野结衣| 亚洲国产一成久久精品国产成人综合 | 大香伊人久久精品一区二区| 伊人久久无码中文字幕| 精品综合久久久久久888蜜芽| 久久精品成人国产午夜| 久久露脸国产精品| 一本久久a久久精品vr综合| 国内精品久久久久| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 亚洲AV日韩精品久久久久久久| 色婷婷久久综合中文久久蜜桃av| 精品久久久久久| 久久黄视频| 久久亚洲中文字幕精品有坂深雪| 色成年激情久久综合| 国产亚洲精品久久久久秋霞| 国产精品久久一区二区三区|