欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
ActiveX控件與Internet
ActiveX控件是一個(gè)自包含代碼的組件,它有自己的永久狀態(tài),并且ActiveX控件與包容器之間通過(guò)COM接口進(jìn)行通信,所以通常ActiveX控件具有普遍的適應性,換句話(huà)說(shuō),如果ActiveX控件在一個(gè)包容器程序中可以運行,那么通常它也可以運行在另一個(gè)包容器程序中。由于A(yíng)ctiveX控件是一種可獨立發(fā)布的組件程序,又是一個(gè)永久對象,這些特性使得它非常適合于Internet環(huán)境。
從包容器IE而言。IE需要考慮一些與Internet環(huán)境有關(guān)的問(wèn)題,如許可證檢查,自動(dòng)下載、遠程數據獲取等。
另一方面從ActiveX控件本身來(lái)看,用于桌面環(huán)境的ActiveX控件,為了獲得更強的交互性能,通常它要實(shí)現各種ActiveX控件所要求的接口,所以組件規模通常很大。為了使程序代碼量盡可能地小,Microsoft Visual C++提供了ATL模板庫作為這類(lèi)ActiveX控件的基本開(kāi)發(fā)工具。
IE要求ActiveX控件必須支持自注冊,以便在用戶(hù)瀏覽包含ActiveX控件的WEB頁(yè)面時(shí)可以動(dòng)態(tài)地注冊控件。所以作為ActiveX控件的DLL程序必須引出DllRegisterServer和DllUnregisterServer函數。
接口
功能與說(shuō)明
IOleObject
如果控件要與包容器程序的站點(diǎn)對象進(jìn)行通信,則須實(shí)現此接口
IOleInPlaceObject
IOleInPlaceActiveObject
如果控件支持實(shí)地激活特性,則須實(shí)現此接口
IOleControl
如果控件支持快捷鍵,或者訪(fǎng)問(wèn)包容器的環(huán)境屬性,或者控件要求包容器處理事件,則須實(shí)現此接口。
IDataObject
如果控件提供數據對象的特性,則實(shí)現此接口
IViewObject2
如果控件在非實(shí)地激活狀態(tài)下也需要顯示信息,則實(shí)現此接口
IDispatch
如果控件有自定義的屬性和方法,則實(shí)現此接口
IConnectionPointContainer
如果控件對象支持一個(gè)或多個(gè)出接口,則實(shí)現此接口。
IProvideClassInfo[2]
如果控件對象要直接通過(guò)GetClassInfo成員函數提供對象類(lèi)型信息,則實(shí)現此接口
ISpecifyPropertyPages
如果控件對象支持屬性頁(yè),則實(shí)現此接口
IPersistStream[Init]
IPersisStorage
或其它永久接口
如果控件對象支持永久特性的,則至少實(shí)現一個(gè)永久接口
從理論上講,IE只要求被嵌入的對象(ActiveX控件以對象的形式被嵌入在頁(yè)面中)實(shí)現IUnKnown接口,但實(shí)際上為了實(shí)現一定的功能,并更好地與IE程序進(jìn)行交互,ActiveX控件還必須實(shí)現其它一些接口。對應的接口與功能對應關(guān)系如上表。
一般的包容器程序通常只負責ActiveX控件的創(chuàng )建、運行和釋放,但IE要做的事情更多一些。首先,當客戶(hù)機上不存在A(yíng)ctiveX控件組件程序時(shí),它必須根據HTML頁(yè)面中指示的地點(diǎn)把組件程序下載過(guò)來(lái),并注冊在客戶(hù)機上,然后再創(chuàng )建對象,此過(guò)程在后臺自動(dòng)完成,不需要執行其它命令。其次,當IE把組件程序下載到本地之后,它在創(chuàng )建控件對象時(shí)可以進(jìn)行許可證檢查,以保證系統安全性,用戶(hù)也可拒絕對象或執行初始化。
ActiveX控件包裝
通過(guò)CLSID指定ActiveX控件的類(lèi)型,如果要在IE中正確顯示包含ActiveX控件的頁(yè)面,則必須事先在機器上注冊相應的ActiveX控件,否則相應的ActiveX就不能顯示。在Internet上使用時(shí),頁(yè)面設計者不能期望瀏覽器用戶(hù)找到你指定的ActiveX控件并注冊到客戶(hù)機上,為了解決這個(gè)問(wèn)題,我們可以用“codebase”屬性指定控件的代碼位置:
Html代碼
<OBJECT CLASSID=”CLSID:2885EE05-A26B-11d1-B49B-00c04F98EFE0”             Codebase=“http://webserver/Pollgon.dll”        ALIGN=”CENTER” WIDTH=200 HEIGHT=200 ID=”PolyCtl”> </OBJECT>
<OBJECT CLASSID=”CLSID:2885EE05-A26B-11d1-B49B-00c04F98EFE0”Codebase=“http://webserver/Pollgon.dll”ALIGN=”CENTER” WIDTH=200 HEIGHT=200 ID=”PolyCtl”> </OBJECT>以上指定了Polygong控件程序“http://webserver/Pollgon.dll”,當瀏覽器碰到這樣的描述時(shí),它會(huì )把codebase指定的程序下載到本地(在系統目錄的“Downloaded Program Files”子目錄下),然后調用組件程序的自注冊入口函數注冊到當前系統中,以后的創(chuàng )建都在本地進(jìn)行,不再涉及codebase屬性。
因為ActiveX控件的程序代碼需要在Internet上傳輸,所以使用壓縮技術(shù)傳輸程序代碼非常有意義。另一方面,如果ActiveX控件還調用到其它的DLL程序模塊,那么IE也必須把這些程序下載到本地來(lái),為此,Microsoft采用了慣用的CAB壓縮方法,它把ActiveX控件程序以及相關(guān)的其它文件放到同一個(gè)CAB文件中,然后在codebase屬性中指定CAB文件的URL路徑。
IE對CAB文件的處理過(guò)程如下:
1. IE在解析“OBJECT”標記時(shí),它繼續查找codebase屬性。
2. 如果找到了codebase屬性,并且codebase指定了ActiveX控件的CAB文件,那么IE定位到CAB文件。
3. IE把CAB文件中的有關(guān)文件解壓出來(lái),并放到客戶(hù)機的臨時(shí)目錄(系統目錄的“Downloaded Program Files”子目錄下)中。
4. IE注冊有關(guān)的文件。
5. IE調用COM API函數創(chuàng )建ActiveX控件對象。
CAB文件包含了ActiveX控件注冊和運行時(shí)所需要的必要信息。通常一個(gè)CAB文件包含一個(gè)INF文件,INF文件是一個(gè)文本文件,它描述了CAB文件的所有細節信息。如以下的INF文件例子。
Cpp代碼
[version]    Signature=”$CHICAGE$”    AdvancedINF=2.0    [Add.Code]    MyCtrl.ocx = MyCtrl.ocx    Msvcrt.dll = msvcrt.dll    Mfc42.dll = mfc42.dll    Olepro32.dll = olepro32.dll    [MyCtrl.ocx]    File-win32-x86=thiscab    Clsid = {2885EE05-A26B-11d1-B49B-00c04F98EFE0}    FileVersion = 1,0,0,0    RegisterServer = yes    [msvcrt.dll]    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=http://activex.microsoft.com/controls/vc/mfc42.cab    Run = %EXTRACT_DIR% \mfc42.exe
[version]Signature=”$CHICAGE$”AdvancedINF=2.0[Add.Code]MyCtrl.ocx = MyCtrl.ocxMsvcrt.dll = msvcrt.dllMfc42.dll = mfc42.dllOlepro32.dll = olepro32.dll[MyCtrl.ocx]File-win32-x86=thiscabClsid = {2885EE05-A26B-11d1-B49B-00c04F98EFE0}FileVersion = 1,0,0,0RegisterServer = yes[msvcrt.dll]FileVersion = 4,20,0,6164Hook = mfc42installer[mfc42.dll]FileVersion=4,2,0,6256Hook=mfc42installer[olepro32.dll]FileVersion = 4,2,0,6068Hook = mfc42installer[mfc42installer]File-win32-x86=http://activex.microsoft.com/controls/vc/mfc42.cabRun = %EXTRACT_DIR% \mfc42.exe [Version]給出了INF文件的基本版本信息,“signature=”一行說(shuō)明此INF文件可適用于32位
Windows操作系統; “AdvancedINF=”一行要求IE必須裝入2.0版以上的Advpack.dll模塊才能解析此INF文件。
[Add.Code]是INF文件的主體部分,它列出了所有ActiveX控件需要的文件以及每個(gè)文件所對應的部分名稱(chēng)。MyCtrl控件是MFC開(kāi)發(fā)的,所以它需要用到MFC的動(dòng)態(tài)連接庫文件,所以,這一部分中列出了MyCtrl控件所必須的四個(gè)文件:MyCtrl.ocx、msvcrt.dll、mfc42.dll和olepro32.dll。
[MyCtrl.ocx]部分描述了MyCtrl控件組件程序MyCtrl.ocx的信息,包括此程序所在的CAB文件位置(thiscab指自身)以及MyCtrl控件的CLSID信息。”FileVersion=”指明了MyCtrl.ocx的版本;”RegisterServer=yes”說(shuō)明此文件在使用之前要預先被注冊。
[msvcrt.dll] [mfc42.dll] [olepro32.dll]部分分別說(shuō)明了相應的文件版本,并把進(jìn)一步信息指向最后的[mfc42installer]部分。
[mfc42installer]部分中,“file-win32-x86=”指明了MFC42.CAB文件的URL路徑,”run=”指明了運行的命令
可用Cabarc.exe工具生成CAB文件,如:
Cabarc.exe N MyCtrl.cab MyCtrl.ocx MyCtrl.inf
用ATL產(chǎn)生的Activex控件所對應的INF文件如下:(可作為ATL開(kāi)發(fā)的樣板)
Cpp代碼
[version]        Signature=”$CHICAGE$”       AdvancedINF = 2.0    [Add.Code]        Polygon.dll = polygon.dll        Atl.dll = atl.dll    [atl.dll]        File-win32-x86=thiscab        FileVersion = 3,00,0,8166        DestDir = 11        RegisterServer=yes    [Polygon.dll]        File-win32-x86=thiscab        Clsid = {2885EE05-A26B-11d1-B49B-00c04F98EFE0}        FileVersion=1,0,0,1        RegisterServer=yes
[version]Signature=”$CHICAGE$”AdvancedINF = 2.0[Add.Code]Polygon.dll = polygon.dllAtl.dll = atl.dll[atl.dll]File-win32-x86=thiscabFileVersion = 3,00,0,8166DestDir = 11RegisterServer=yes[Polygon.dll]File-win32-x86=thiscabClsid = {2885EE05-A26B-11d1-B49B-00c04F98EFE0}FileVersion=1,0,0,1RegisterServer=yes 這里新出現的標記為“DestDir=”,它是指文件下載過(guò)來(lái)之后存放的目標目錄,“11”表示
Windows的系統目錄(“Windows\System” 或 “WInnt\System32”);“10”指windows目錄
(windows或winnt)。根據INF文件生成的CAB文件命令為:
Cabarc.exe N Polygon.cab atl.dll Polygon.dll Polygon.inf
CAB文件也支持數字簽名,我們在利用cabarc.exe工具生成CAB文件時(shí)可以用 –s命令行
參數預留數簽名空間,然后運行實(shí)用工具SIGNCODE,加入數字簽名即可。
許可證管理
除了免費發(fā)行的ActiveX之外,大多數ActiveX控件都支持設計時(shí)刻和運行時(shí)刻的許可
證檢查。設計時(shí)刻許可證檢查可以保證程序員在創(chuàng )建就用系統或者WEB頁(yè)面時(shí)使用合法的
ActiveX控件;運行時(shí)刻許可證檢查可以保證用戶(hù)運行一個(gè)包含合法的控件的就用系統或者
顯示一個(gè)包含合法控件的Web頁(yè)面。
由于許可證檢查是在A(yíng)ctiveX控件被創(chuàng )建時(shí)進(jìn)行的,所以不管是設計時(shí)刻許可檢查還是
運行時(shí)刻許可檢查,實(shí)現的關(guān)鍵在于A(yíng)ctiveX控件的類(lèi)廠(chǎng)對象。如果ActiveX控件支持許可
檢查,那么其類(lèi)廠(chǎng)對象必須支持IClassFactory2接口。此接口是IClassFactory的擴展。
許可證是一段文本信息,它可以存放在單獨的文件中,也可以存放在組件程序二進(jìn)制代
碼中或者就用程序中。但作為ActiveX控件組件程序,它只需實(shí)現IClassFactory2接口的三
個(gè)成員函數,對于許可證的管理和用法取決于包容器程序。不同類(lèi)型的包容器程序對許可證
的處理有所不同,并且設計時(shí)刻與運行時(shí)刻對許可證的處理也有所不同。
在創(chuàng )建包含ActiveX控件的應用程序時(shí),包容器(如VB或其它開(kāi)發(fā)工具)調用
IClassFactory2::GetLicInfo和RequestLicKey函數獲取許可證,然后嵌入到應用程序的二進(jìn)制
代碼中。在運行應用程序時(shí)刻,作為包容器程序的應用程序在創(chuàng )建ActiveX控件時(shí),調用
IClassFactory2::CreateInstanceLic函數創(chuàng )建控件對象,與設計時(shí)刻不同的是,它在bstrKey
參數中傳遞有效的許可證字符串(內嵌在程序中)而不是NULL。所以這樣的程序可以
在任何一機器上運行,而不用擔心許可問(wèn)題
對于IE這樣的包容器程序,它也調用IClassFactory2的成員函數進(jìn)行許可檢查,但由于
ActiveX控件被包含在Web頁(yè)面上,任何瀏覽器都可以訪(fǎng)問(wèn)到Web頁(yè)面,并且IE在創(chuàng )建控
件之前已經(jīng)把程序代碼下載到本地,所以IE需要其它的方式把許可證隱藏起來(lái),以避免許
可證被非法濫用。Microsoft為此引進(jìn)了許可證包文件(license package file,文件名后綴為
LPK)。
許可證文件格式共分四部分:
1. LPK文件頭。包含信息“LPK License Package”。
2. 版權信息。對版權的解釋以及對非法拷貝的警告。
3. LPK文件的版本和GUID。文本信息,也標識了真正許可證數據的開(kāi)始。
4. 用UUENCODED(Base64)碼對許可證進(jìn)行編碼。包含多個(gè)對象(CLSID)與相應的許可證(UNICODE字符串)。
IE包含一個(gè)許可證管理器組件,它負責解析LPK文件,并提取出每個(gè)CLSID的許可證。當
IE要顯示ActiveX控件時(shí),它通過(guò)許可證管理器組件從LPK文件提取出許可證,然后調用IClassFactory2::CreateInstanceLic函數創(chuàng )建ActiveX控件對象,如果它指定的許可與ActiveX控件內部的許可證相匹配,那么ActiveX控件就會(huì )被創(chuàng )建并在頁(yè)面上顯示。
創(chuàng )建許可證包文件可以使用Microsoft提供的實(shí)用工具LPK_TOOL.EXE。為所指定的ActiveX控件生成相應的LPK文件。一旦生成了LPK文件,并可在WEB頁(yè)中使用,如:
<OBJECT CLASSID=”clsid: 2885EE05-A26B-11d1-B49B-00c04F98EFE0”>
<PARAM NAME=”LPKPATH” VALUE=”MyPage.lpk”>
</OBJECT>
LPK文件針對整個(gè)WEB頁(yè)面,而不是單個(gè)ActiveX控件,所以每個(gè)WEB頁(yè)面只能使用一個(gè)LPK文件。
WEB頁(yè)面中ActiveX控件的初始化
在“OBJECT”標記的“DATA”屬性中指定包含屬性數據文件的URL文件名。如果DATA屬性包含URL文件名,那么包容器就創(chuàng )建一個(gè)URL名字對象,并且調用ActiveX控件IPersistMoniker接口的Load成員函數執行初始化。ActiveX控件調用名字對象的IMoniker::BindToStorage函數以便獲取屬性數據并進(jìn)行初始化。
如果ActiveX不支持IPersistMoniker接口,則IE會(huì )請求其它的永久接口,然后獲取屬性數據,必要時(shí)打包到流對象中,再調用永久接口的LOAD成員函數。于是ActiveX控件就可通過(guò)流對象得到屬性數據。
以下HTML說(shuō)明在Web頁(yè)面中為ActiveX控件指定屬性數據的方法
Html代碼
<OBJECT CLASSID=” 2885EE05-A26B-11d1-B49B-00c04F98EFE0”             CODEBASE=”http://webServer/MyCtrl.cab”             Data=”http://webServer/Mydata.dat”             ID=”MyCtrl”></OBJECT>
<OBJECT CLASSID=” 2885EE05-A26B-11d1-B49B-00c04F98EFE0”CODEBASE=”http://webServer/MyCtrl.cab”Data=”http://webServer/Mydata.dat”ID=”MyCtrl”></OBJECT>
有時(shí)候ActiveX控件的屬性數據量很小,可以只用一些數值或字符串就把屬性表達出來(lái)。這種情況下,使用流方式的屬性表達式就沒(méi)有必要,可以在HTML中使用“
PARAM”關(guān)鍵字對ActiveX控件的屬性進(jìn)行賦值。如:
Html代碼
<OBJECT CLASSID=” 2885EE05-A26B-11d1-B49B-00c04F98EFE0”             CODEBASE=”http://webServer/MyCtrl.dll”>            <PARAM NAME = “Sides” VALUE = 5>   </OBJECT>
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
用ATL開(kāi)發(fā)和部署ActiveX網(wǎng)頁(yè)控件
一步一步學(xué)習C++的ActiveX網(wǎng)頁(yè)控件開(kāi)發(fā)
cab文件打包的ActiveX控件
ActiveX控件的WEB發(fā)布
如何發(fā)布ActiveX 控件
VC2005從開(kāi)發(fā)MFC ActiveX ocx控件到發(fā)布到.net網(wǎng)站的全部過(guò)程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久