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

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>
            国产伦精品免费视频| 亚洲图片激情小说| 99国产精品久久久久久久| 国产区二精品视| 日韩亚洲欧美成人一区| 精品成人久久| 亚洲综合欧美| 一本久久综合亚洲鲁鲁五月天| 久久成人免费| 午夜在线一区二区| 欧美日韩高清不卡| 欧美激情一区在线观看| 国外成人在线视频网站| 亚洲网站视频| 亚洲一区在线播放| 欧美日本韩国一区| 亚洲黑丝在线| 亚洲成色777777女色窝| 欧美在线啊v一区| 久久精视频免费在线久久完整在线看 | 一区二区三区日韩欧美| 亚洲日本中文字幕| 六月婷婷久久| 欧美韩日精品| 亚洲久久视频| 欧美理论电影在线观看| 亚洲高清不卡在线| 亚洲国产精品久久91精品| 久久国产高清| 免费看成人av| 亚洲日本电影| 欧美国产一区在线| 亚洲国产一区在线观看| 99精品国产热久久91蜜凸| 男女精品视频| 亚洲欧洲日韩在线| 在线天堂一区av电影| 欧美日韩专区在线| 亚洲天堂久久| 久久久久久久久久久久久9999| 国产一区二区三区在线观看网站| 性色av一区二区怡红| 久久婷婷蜜乳一本欲蜜臀| 激情综合色综合久久| 久久天堂精品| 亚洲人成在线观看网站高清| 中文亚洲视频在线| 国产精品亚洲аv天堂网| 欧美亚洲综合网| 麻豆成人在线播放| 亚洲二区免费| 欧美巨乳在线| 亚洲伊人伊色伊影伊综合网 | 亚洲中字在线| 久久久久久电影| 精品1区2区3区4区| 欧美大片免费久久精品三p | 久久久久久欧美| 亚洲国内高清视频| 欧美日韩在线视频首页| 午夜精品久久久久久| 欧美a级一区| 一本久久a久久免费精品不卡| 国产精品家教| 免费观看日韩| 亚洲网在线观看| 欧美黄色网络| 亚洲永久免费观看| 伊人久久亚洲热| 欧美日韩在线播放一区二区| 欧美一区二区三区免费视频| 亚洲国产精品va在看黑人| 亚洲一区二区动漫| 伊人久久成人| 国产精品久久久久秋霞鲁丝| 久久久精品网| 99国产精品视频免费观看| 久久久爽爽爽美女图片| 中文精品99久久国产香蕉| 国模套图日韩精品一区二区| 欧美日韩高清在线播放| 欧美综合二区| 夜夜嗨av一区二区三区四季av | 亚洲第一精品电影| 午夜欧美不卡精品aaaaa| 亚洲国产日韩欧美在线图片| 国产精品一区二区你懂的| 欧美国产免费| 久久久久在线观看| 亚洲伊人伊色伊影伊综合网 | 国产精品色网| 欧美激情日韩| 久久综合伊人77777| 亚洲欧美中文日韩在线| 亚洲精品亚洲人成人网| 欧美电影免费| 久久亚洲图片| 欧美亚洲免费在线| 在线视频一区二区| 99国产精品国产精品毛片| 亚洲国产精品99久久久久久久久| 国产欧美综合在线| 国产精品久久久久久久免费软件| 欧美喷潮久久久xxxxx| 久久夜色撩人精品| 亚洲欧美国产另类| 亚洲天堂av高清| 在线亚洲欧美| 99视频一区二区三区| 亚洲免费福利视频| 亚洲精品一区二区网址| 亚洲精品乱码久久久久久黑人| 欧美电影在线观看完整版| 快she精品国产999| 免费看精品久久片| 男同欧美伦乱| 欧美国产日韩一区| 欧美激情一区二区三区在线视频| 欧美成人免费在线| 欧美国产综合一区二区| 欧美成人嫩草网站| 亚洲缚视频在线观看| 亚洲国产欧美久久| 最新亚洲激情| 亚洲狼人综合| 一区二区三区不卡视频在线观看| 亚洲精品视频免费观看| 亚洲免费观看| 亚洲午夜国产成人av电影男同| 亚洲桃花岛网站| 欧美一级淫片播放口| 久久国产婷婷国产香蕉| 久久青青草原一区二区| 欧美成人免费网| 欧美另类videos死尸| 欧美日韩一区免费| 国产精品区免费视频| 国产一区 二区 三区一级| 激情久久一区| 亚洲美女区一区| 亚洲男女自偷自拍| 欧美在线免费看| 牛牛精品成人免费视频| 亚洲精品乱码| 欧美一级一区| 欧美高清影院| 国产女人精品视频| 亚洲国产精品综合| 在线亚洲美日韩| 久久伊人亚洲| 亚洲精品一区在线| 欧美一区二区三区喷汁尤物| 免费成人美女女| 国产老肥熟一区二区三区| 在线不卡中文字幕| 亚洲午夜精品17c| 久久中文在线| av不卡免费看| 久久久久久久久久久久久女国产乱| 女女同性女同一区二区三区91| 欧美日韩一区二区免费在线观看| 国产欧美日韩亚州综合| 亚洲麻豆av| 久久久精品国产免大香伊| 亚洲国产欧美一区二区三区丁香婷| 一本久久精品一区二区| 久久精品国产久精国产思思| 欧美精品激情在线| 国产日韩欧美精品综合| 亚洲美女在线视频| 久久高清国产| 日韩亚洲精品电影| 久久综合九色欧美综合狠狠| 国产精品日韩| 亚洲精品免费一二三区| 久久精品国产免费看久久精品| 亚洲人成在线播放| 久久青草欧美一区二区三区| 国产精品一二三| 99视频精品在线| 免费看成人av| 久久aⅴ国产紧身牛仔裤| 欧美视频日韩视频在线观看| 亚洲成人自拍视频| 久久久久女教师免费一区| 亚洲视频在线一区| 欧美日产国产成人免费图片| 亚洲国产精品久久久久婷婷老年 | 久久精品欧洲| 亚洲视频福利| 欧美日韩国产二区| 亚洲精品久久久久久下一站 | 在线欧美日韩| 久久久久久免费| 午夜精品久久久久久久久久久久| 欧美国产日韩亚洲一区| 亚洲福利视频一区| 玖玖综合伊人| 久久久久国产精品www| 韩日精品中文字幕|