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

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>
            先锋a资源在线看亚洲| 久久夜色精品| 久久国产视频网站| 欧美影院久久久| 欧美在线观看日本一区| 欧美在线视频不卡| 久久蜜桃精品| 免费一级欧美在线大片| 男女激情视频一区| 亚洲精品国产精品久久清纯直播| 欧美黑人一区二区三区| 亚洲福利在线视频| 日韩一区二区久久| 亚洲欧美日韩综合一区| 久久久久久色| 欧美色欧美亚洲高清在线视频| 国产精品少妇自拍| 一区在线观看| 亚洲图片欧美日产| 久久综合九色综合久99| 亚洲精品一区二区三区四区高清 | 欧美专区第一页| 久久男女视频| 91久久精品国产91久久性色| 亚洲专区国产精品| 欧美国产91| 国产亚洲一区二区三区在线播放| 亚洲成人资源网| 亚洲欧美日韩国产中文在线| 欧美gay视频激情| 亚洲无线观看| 欧美顶级少妇做爰| 国产亚洲人成a一在线v站| 亚洲每日在线| 久久久一二三| 亚洲乱码国产乱码精品精可以看| 欧美一区在线看| 欧美日本一区二区三区| 在线播放中文一区| 性欧美激情精品| 日韩视频免费观看高清在线视频 | 欧美日韩免费网站| 影音先锋日韩资源| 欧美综合77777色婷婷| 亚洲精品在线观看免费| 老司机精品导航| 国产日韩欧美电影在线观看| 在线午夜精品| 亚洲九九爱视频| 欧美a级一区| 亚洲成人在线视频播放| 国产精品国产三级国产专区53 | 亚洲乱码精品一二三四区日韩在线 | 日韩午夜一区| 欧美h视频在线| 亚洲福利精品| 毛片一区二区三区| 久久成人免费日本黄色| 国产精品成人一区二区三区夜夜夜 | 99视频超级精品| 欧美国产亚洲精品久久久8v| 久久精品一区二区三区不卡牛牛 | 午夜久久一区| 亚洲无吗在线| 国产精品素人视频| 午夜在线视频观看日韩17c| 在线亚洲成人| 国产精品捆绑调教| 欧美中文字幕视频| 久久国产夜色精品鲁鲁99| 国产在线视频不卡二| 久久综合九色综合欧美就去吻| 欧美在线一区二区| 亚洲第一精品夜夜躁人人爽| 欧美成人免费全部观看天天性色| 久久精品女人| 亚洲破处大片| 一本一本久久a久久精品综合麻豆| 欧美午夜电影一区| 久久福利影视| 久久一区二区精品| 夜夜嗨av一区二区三区四季av| 亚洲毛片一区二区| 国产欧美亚洲一区| 欧美jizz19hd性欧美| 欧美大色视频| 性欧美video另类hd性玩具| 久久国产精品电影| 亚洲美女一区| 午夜精品久久久久| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美一区二粉嫩精品国产一线天| 性8sex亚洲区入口| 欧美日韩一级黄| 午夜免费电影一区在线观看| 久久久水蜜桃| 亚洲欧美久久久| 久久亚洲综合网| 亚洲综合成人在线| 蜜桃久久精品一区二区| 校园春色国产精品| 欧美人在线视频| 久久久夜精品| 国产精品青草综合久久久久99| 欧美1级日本1级| 国产欧美日韩一区二区三区在线| 亚洲国产午夜| 精品成人乱色一区二区| 一本一本久久a久久精品综合妖精| 精久久久久久| 午夜一级久久| 亚洲欧美一区二区三区久久| 免费亚洲一区二区| 午夜激情久久久| 欧美日韩国产经典色站一区二区三区| 性欧美xxxx视频在线观看| 欧美精品在线一区二区| 欧美a级片一区| 国产一区二区三区直播精品电影 | 欧美日韩精品免费观看视频| 久热这里只精品99re8久| 国产精品久久久亚洲一区| 亚洲黄色av一区| 亚洲电影第1页| 久久成人精品| 久久国产福利| 国产精品美女视频网站| 亚洲精品国产精品国产自| 亚洲国产日韩欧美一区二区三区| 蜜桃av一区| 久久久欧美一区二区| 国产精品午夜国产小视频| 一本久久综合亚洲鲁鲁五月天 | 久久久久久精| 国产午夜精品久久| 亚洲欧美日韩国产另类专区| 亚洲一区在线视频| 国产精品乱码一区二三区小蝌蚪| 亚洲精品日韩综合观看成人91| 亚洲精品欧美精品| 欧美韩国日本一区| 最新中文字幕亚洲| 一区二区毛片| 国产精品久久久久影院色老大| 夜久久久久久| 欧美亚洲免费高清在线观看| 国产酒店精品激情| 欧美在线资源| 亚洲高清一区二| 一区二区三区**美女毛片| 欧美特黄视频| 亚洲欧美国产精品专区久久| 久久精品理论片| 一色屋精品亚洲香蕉网站| 久热爱精品视频线路一| 在线视频欧美日韩| 国产精品免费看片| 久久国产精品久久久| 欧美 亚欧 日韩视频在线| 99综合视频| 国产欧美日韩中文字幕在线| 久久国产一二区| 日韩一级欧洲| 久久精品综合一区| 亚洲国产三级在线| 国产精品久久久久999| 久久久久国产精品一区三寸| 欧美黄色日本| 午夜一区二区三视频在线观看| 国产一区二区三区视频在线观看 | 国产午夜精品久久久久久久| 久久美女艺术照精彩视频福利播放| 欧美高清视频在线| 亚洲欧美日韩成人| 亚洲电影免费观看高清| 国产精品高潮呻吟久久av黑人| 欧美一区二区三区在线视频| 欧美黄污视频| 欧美在线视频一区二区| 亚洲日本va午夜在线电影| 国产精品视频999| 你懂的亚洲视频| 欧美一区午夜视频在线观看| 亚洲欧洲在线视频| 久久久精品tv| 亚洲——在线| 亚洲精品人人| 黄色成人小视频| 国产精品免费观看在线| 欧美大片免费看| 久久久水蜜桃av免费网站| 一区二区三区欧美| 欧美激情性爽国产精品17p| 欧美专区在线| 午夜视频久久久久久| 9色国产精品| 在线欧美小视频| 国产一区二区三区视频在线观看| 欧美精品一区在线观看| 玖玖玖免费嫩草在线影院一区|