青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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.¢% 閱讀(1229) 評論(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 組件下載是如何實現的?)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品区一区二区三区| 午夜久久久久久| 久久九九免费视频| 性做久久久久久久免费看| 亚洲精品一区二区三区蜜桃久| 美女精品在线观看| 免费视频一区| 亚洲美女中文字幕| 亚洲欧美国产精品va在线观看| 亚洲男女自偷自拍| 美女黄网久久| 欧美激情视频在线播放| 欧美视频日韩| 亚洲国产精品久久久久秋霞影院 | 亚洲国产精品一区| 亚洲乱码精品一二三四区日韩在线 | 亚洲国产视频直播| 亚洲一区二区精品| 麻豆精品网站| 国语自产精品视频在线看| 亚洲毛片在线看| 久久午夜影视| 久久se精品一区二区| 欧美一区二区三区精品| 亚洲福利视频在线| 久久中文欧美| 国内精品久久久| 久久一区国产| 欧美在线视频二区| 国产一区二区三区四区| 午夜精品免费| 亚洲一区在线观看免费观看电影高清| 欧美国产一区二区在线观看| 国产亚洲精品久久久久动| 亚洲欧美日韩精品久久久久| 亚洲精品国产系列| 欧美日韩国产色综合一二三四| 亚洲乱码国产乱码精品精天堂 | 国产一区二区三区久久久| 中日韩美女免费视频网址在线观看| 亚洲国产小视频| 欧美精品国产精品| 亚洲午夜精品久久| 夜夜嗨av一区二区三区| 欧美日韩一区在线| 欧美亚洲日本网站| 久久成人免费视频| 亚洲日本中文字幕免费在线不卡| 免费久久99精品国产自| 欧美成人综合| 性欧美video另类hd性玩具| 日韩视频在线观看国产| 一本色道久久88综合日韩精品 | 午夜精品三级视频福利| 永久免费视频成人| 亚洲曰本av电影| 亚洲第一页在线| 一区二区三区国产精华| 国产综合视频在线观看| 亚洲大胆视频| 久久免费视频在线观看| 亚洲无线视频| 欧美精品三区| 欧美成在线视频| 国产精品中文字幕在线观看| 欧美福利视频一区| 黄色成人在线观看| 欧美中文在线视频| 欧美亚洲日本一区| 国产精品综合久久久| 99视频超级精品| 亚洲精品永久免费精品| 巨乳诱惑日韩免费av| 久久九九免费视频| 一区二区三区自拍| 久久九九99| 欧美xxx成人| 亚洲毛片在线| 欧美日韩在线播放三区四区| 亚洲国产片色| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲私人影院| 欧美一区二区三区免费大片| 欧美午夜国产| 欧美影院成人| 欧美久久久久久久| 亚洲激情社区| 亚洲欧美日韩精品久久| 国产一区二区三区日韩欧美| 久久国产精品高清| 亚洲国产二区| 久久久91精品国产一区二区精品| 国际精品欧美精品 | 老司机久久99久久精品播放免费| 国产综合久久| 国产精品www色诱视频| 欧美在线观看一区二区三区| 亚洲激情视频网| 久久高清国产| 亚洲一区二区在线播放| 亚洲高清网站| 国产一区二区三区久久 | 在线综合亚洲欧美在线视频| 国产精品分类| 欧美激情一区二区在线| 久久黄色影院| 久久精品首页| 久久精视频免费在线久久完整在线看| 亚洲精品美女免费| 在线一区二区三区四区| 亚洲精品国产精品国产自| 欧美视频精品一区| 欧美日本精品| 欧美日韩视频在线观看一区二区三区| 亚洲美女黄色| 国产精品99久久久久久久女警 | 亚洲第一网站免费视频| 欧美 日韩 国产在线| 久热精品在线| 欧美激情欧美激情在线五月| 欧美黄色免费网站| 亚洲精品一区二区三| 99精品久久久| 亚洲一区二区三区在线看| 亚洲欧美日韩国产另类专区| 亚洲无线视频| 欧美成人蜜桃| 国产精品久久久久久久一区探花| 国产精品久久久999| 国产免费成人av| 亚洲第一综合天堂另类专| 亚洲人成网站在线播| 亚洲女人天堂av| 欧美高清一区| 亚洲欧美国产日韩天堂区| 美女视频一区免费观看| 国产精品黄色| 日韩亚洲欧美一区| 久久亚洲私人国产精品va| 亚洲第一在线| 久久久久久久性| 国产日韩欧美电影在线观看| 亚洲欧洲日韩在线| 欧美成人官网二区| 欧美一区二区三区在线看| 欧美性jizz18性欧美| 在线视频中文亚洲| 亚洲精品中文字幕在线| 久久综合九色综合网站| 国语自产精品视频在线看一大j8| 亚洲欧美综合国产精品一区| 99成人精品| 国产精品日日摸夜夜摸av| 亚洲男女自偷自拍| 在线视频亚洲一区| 国产亚洲第一区| 久久亚洲精品伦理| 久久香蕉精品| 久久亚洲精品视频| 亚洲国产岛国毛片在线| 久久五月婷婷丁香社区| 午夜精品久久久久久久| 欧美三级在线| 9久草视频在线视频精品| 欧美韩日一区| 欧美激情1区2区| 一区二区三区四区精品| 亚洲精品国产精品国自产观看| 美日韩精品免费观看视频| 国产精品va在线| 香蕉成人久久| 久久噜噜噜精品国产亚洲综合| 国产精品久久久久一区二区三区共| 亚洲一区二区影院| 欧美影片第一页| 一区二区高清视频| 亚洲国产裸拍裸体视频在线观看乱了 | 免费高清在线一区| 麻豆精品传媒视频| 国产乱码精品一区二区三区五月婷| 欧美一区亚洲| 久久影视三级福利片| 日韩视频在线一区二区三区| 一区电影在线观看| 黑人一区二区三区四区五区| 欧美福利一区| 国产亚洲精品一区二555| 欧美国产免费| 国产精品久久久久9999吃药| 久久久久久久综合日本| 欧美精品久久一区| 每日更新成人在线视频| 国产精品视频久久一区| 欧美激情亚洲综合一区| 国产精品欧美在线| 亚洲激情精品| 日韩视频精品在线| 欧美凹凸一区二区三区视频| 国产精品99久久久久久人| 麻豆精品91|