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

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.¢% 閱讀(1232) 評論(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>
            欧美激情亚洲自拍| 在线成人黄色| 欧美激情欧美狂野欧美精品| 欧美视频一区二区三区| 你懂的亚洲视频| 国产亚洲成av人在线观看导航| 最新国产精品拍自在线播放| 国产欧美日韩免费| 一区二区三区日韩欧美精品| 亚洲国产精品一区二区第一页 | 久久久久久一区二区三区| 欧美日韩国产专区| 欧美激情黄色片| 在线看欧美视频| 久久精品天堂| 久久精品日产第一区二区三区| 国产精品久久77777| 亚洲毛片视频| 日韩一级精品| 欧美国产亚洲精品久久久8v| 免费看黄裸体一级大秀欧美| 激情一区二区三区| 久久久久久尹人网香蕉| 美女国产一区| 亚洲福利视频网站| 欧美搞黄网站| 亚洲美女中文字幕| 日韩视频永久免费| 欧美日韩国产限制| 中文成人激情娱乐网| 亚洲一区二区免费视频| 欧美日韩午夜| 9l国产精品久久久久麻豆| 亚洲一区高清| 国产日韩欧美在线| 久久人人爽人人| 欧美激情中文不卡| 99re热精品| 欧美吻胸吃奶大尺度电影| 亚洲精品美女在线| 夜夜嗨av一区二区三区免费区| 久久一区二区三区四区五区| 久久综合久久综合久久| 国产主播一区二区三区| 欧美怡红院视频| 久久久久久网站| 国产精品av久久久久久麻豆网| 一区二区日韩精品| 午夜精品在线| 国产视频久久久久| 久久精品二区三区| 久久男人av资源网站| 一色屋精品视频在线看| 久久一区二区三区国产精品| 男人的天堂亚洲在线| 亚洲日本va午夜在线影院| 麻豆精品一区二区综合av| 亚洲夫妻自拍| 在线亚洲精品| 国产精品免费看久久久香蕉| 亚洲视频网站在线观看| 性色av一区二区三区红粉影视| 国产精品香蕉在线观看| 久久疯狂做爰流白浆xx| 免费亚洲视频| 中文一区二区| 国产人妖伪娘一区91| 久久亚洲图片| 亚洲精品色图| 久久香蕉国产线看观看网| 亚洲激情婷婷| 国产精品久久久久av| 亚洲欧美日韩精品久久久久| 麻豆国产精品va在线观看不卡| 亚洲国产精品va在线看黑人动漫| 欧美高清视频一区二区| 亚洲欧美日韩国产一区二区三区| 久久另类ts人妖一区二区| 日韩午夜在线视频| 国产欧美日本| 欧美精品九九99久久| 亚洲在线视频免费观看| 久久精品72免费观看| 国产精品素人视频| 久久青青草原一区二区| 一区二区免费在线视频| 蜜臀av国产精品久久久久| 一区二区三区你懂的| 激情五月***国产精品| 欧美日韩一二区| 久久国产主播精品| 亚洲一区二区精品在线| 亚洲国产高清自拍| 久久久999精品| 亚洲无线观看| 亚洲欧洲精品一区二区| 激情久久五月| 国产欧美韩日| 欧美日韩视频在线| 久久综合五月| 欧美一区二区视频在线| 亚洲午夜一级| 亚洲乱码国产乱码精品精天堂 | 欧美激情综合在线| 蜜桃精品久久久久久久免费影院| 亚洲一二三区精品| 91久久在线观看| 欧美福利专区| 久久久777| 欧美一区在线看| 亚洲一区三区视频在线观看| 亚洲精品视频在线看| 亚洲二区视频在线| 国产在线拍偷自揄拍精品| 国产精品一区一区| 国产精品青草久久久久福利99| 欧美.www| 欧美二区视频| 暖暖成人免费视频| 媚黑女一区二区| 嫩草影视亚洲| 免费成人在线视频网站| 久久永久免费| 欧美96在线丨欧| 免费在线亚洲欧美| 欧美国产日韩亚洲一区| 久久九九电影| 欧美高清在线精品一区| 欧美精品大片| 欧美视频在线观看免费| 欧美日韩不卡在线| 欧美日韩一区视频| 欧美日韩亚洲一区二区| 国产精品福利av| 国产精品视频一二三| 国产精品婷婷午夜在线观看| 国产女主播一区| 国产精品综合色区在线观看| 国产精品美女午夜av| 国产麻豆午夜三级精品| 狠狠色狠色综合曰曰| 在线精品观看| 亚洲精品国产欧美| 亚洲午夜av电影| 午夜日韩视频| 久久久久一区二区三区四区| 女仆av观看一区| 亚洲国产精品成人va在线观看| 久久综合久久综合久久| 亚洲综合日韩| 久久综合伊人| 亚洲国产免费| 亚洲天堂成人| 久久国产精品一区二区| 欧美大片免费| 国产精品一区二区三区四区| 伊人影院久久| 在线视频欧美日韩| 久久精品亚洲一区二区三区浴池| 香蕉成人伊视频在线观看| 欧美激情第3页| 亚洲一区二区三区在线播放| 久久精品一本| 国产精品va在线| 在线看日韩欧美| 亚洲摸下面视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲人体影院| 香蕉av777xxx色综合一区| 美女被久久久| 国产毛片一区二区| 99视频在线精品国自产拍免费观看| 午夜在线精品| 亚洲激情另类| 亚洲一区欧美激情| 美女成人午夜| 国产午夜精品美女毛片视频| 在线亚洲一区二区| 麻豆精品在线观看| 亚洲一区二区网站| 欧美激情一区二区三区在线视频| 国产又爽又黄的激情精品视频| 一本综合久久| 久久综合九色综合欧美狠狠| 99re热这里只有精品视频 | 蜜臀av国产精品久久久久| 国产精品海角社区在线观看| 在线日韩欧美| 久久久久久九九九九| 日韩一级在线观看| 欧美国产日韩视频| 亚洲成色www8888| 久久精品成人欧美大片古装| 欧美激情欧美狂野欧美精品 | 一本久久综合亚洲鲁鲁| 久久久久9999亚洲精品| 国产欧美日韩亚洲| 午夜视黄欧洲亚洲| 99综合视频| 欧美三日本三级少妇三99|