歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

COM組件編程基礎(chǔ)課件

  • 資源ID:253396717       資源大?。?span id="awceseo" class="font-tahoma">3.64MB        全文頁數(shù):78頁
  • 資源格式: PPT        下載積分:20積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要20積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。

COM組件編程基礎(chǔ)課件

,,,,,,,,單擊此處編輯母版標(biāo)題樣式,,,*,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),,,,,,,,,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),,,*,§,10. 1 COM,簡(jiǎn)介,一、什么是,COM,,COM,(,Component Object Model,): 組件對(duì)象模型,,其中:,1.,它定義了一套為構(gòu)建一個(gè)組件所必需遵循的規(guī)則。或,者說它是一個(gè)說明如何建立可動(dòng)態(tài)交替更新組件的規(guī),范,該規(guī)范為客戶和組件提供保證能夠互操作應(yīng)該遵,循的標(biāo)準(zhǔn);,2.,它定義了組件和它們的客戶之間互相作用的方式。采,用客戶進(jìn)程直接調(diào)用組件中的方法,使得組件和客戶,端無需任何中介組件就能互相聯(lián)系;,,3. COM,組件有可執(zhí)行代碼組成,即以二進(jìn)制代碼形,式重用,一般通過,DLL/EXE,形式發(fā)布,且通過,GUID,來保證每個(gè),COM,對(duì)象是全球唯一的。,,§10. 1 COM簡(jiǎn)介一、什么是COM,1,說明:,,1. COM,不是一類程序的擴(kuò)展名,也不是一種程序設(shè)計(jì),語言;,,2. COM,可利用,DLL,來給組件提供動(dòng)態(tài)鏈接的能力,但,COM,不是,DLL,;,,3. COM,可采用各種語言進(jìn)行編寫(語言無關(guān)性),同一,個(gè)軟件中不同組件可以使用不同的語言和工具開發(fā),;,,4. COM,是由,OLE,(對(duì)象連接與嵌入)技術(shù)發(fā)展而來,,COM,技術(shù)的目的是為開發(fā)、維護(hù)應(yīng)用程序提供高效靈,活手段,,說明:,2,二、,COM,服務(wù)器、,COM,對(duì)象、,COM,接口和函數(shù)的關(guān)系,,1.,一個(gè),COM,服務(wù)器(,DLL,或,EXE,)可以包含若干個(gè),COM,對(duì)象;,2.,一個(gè),COM,對(duì)象可以包含若干個(gè)接口;,3.,一個(gè)接口可以包含若干個(gè)函數(shù)。,COM,服務(wù)器,,,,,,,,,,,COM,對(duì)象,1,,,,,,,,,,,接口,1,,,,,函數(shù),1,函數(shù),2,接口,2,,,函數(shù),1,,COM,對(duì)象,2,,,,,,,,,接口,1,,,,,,,函數(shù),1,函數(shù),2,函數(shù),3,二、COM服務(wù)器、 COM對(duì)象、COM接口和函數(shù)的關(guān)系COM,3,,IInterface_1,IInterface_2,COM,服務(wù)器,,,,,,,,,,,,接口對(duì)象,1,,,,,函數(shù),1,函數(shù),2,接口對(duì)象,2,,,函數(shù),1,IUnknown,說明:一般將,COM,對(duì)象表示為帶固定格式的圓形接頭,,每個(gè)接頭表示一個(gè)對(duì)外提供的接口,,IUnknown,接,口處首要地位,.,IInterface_1IInterface_2COM服務(wù)器,4,三、,接口,,1. COM,接口提供訪問對(duì)象的一種方式,應(yīng)用程序只能通過一個(gè)接,口指針訪問對(duì)象的函數(shù)。,COM,接口由一個(gè),全 局唯一標(biāo)識(shí)符,(,GUID,),IID,來區(qū)分和確定。,,2.,所有,COM,接口都從,IUnknown,接口派生,struct IUnknown,{,virtual LONG QueryInterface( REFIID riid, void **ppv) = 0;,virtual ULONG AddRef( void) = 0;,virtual,ULONG,Release( void) = 0;,},,其中:,,⑴,,QueryInterface,通過接口標(biāo)識(shí)符,riid,查詢(確定)接口,返回,指向接口的指針的指針,同時(shí)調(diào)用,AddRef(),;,,⑵,AddRef,和,Release,用來管理對(duì)象接口被訪問的參數(shù)計(jì)數(shù)。調(diào)用這兩種方法的規(guī)則為:設(shè),N,為接口被訪問的計(jì)數(shù)器。,?,無論何時(shí)客戶接收到接口指針時(shí),必須調(diào)用,AddRef,:,N++,?,無論何時(shí)客戶完成使用接口指針時(shí),必須調(diào)用,Release,:,N- -,其目的是管理被使用的,COM,何時(shí)能夠被釋放:當(dāng),N=0,時(shí),三、接口,5,,UUID/GUID,:,Universally/Globals Unique IDentifiers,,通用,/,全局(球)唯一標(biāo)識(shí)符(,128,位,,16,字節(jié),,,,32,個(gè)字符),,GUID,的格式為:,“,xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每個(gè),x,是,0-9,或,A-F,范圍內(nèi)的一個(gè)十六進(jìn)制的數(shù)字。,例如:,97AD6FA3-8CAD-4068-90AE-320545A1E8C8,,即為有效的,GUID,值,。,,CLSID,:,COM,類標(biāo)識(shí)符(,CLASS Identifiers,),LIBID,:類型庫標(biāo)識(shí)符(,type LIBrary Identifier,),IID,:接口標(biāo)識(shí)符(,Interface Identifiers,),ProgID,:,Programmer IDentifiers,,程序員給,CLSID,指定的一個(gè)程序員易記的名稱,根據(jù)約定,, ProgID,格式如下,:, . . ,IDL,:接口定義語言(,Interface Definition Language,),DCOM,:分布式組建對(duì)象模型(,Distributed Component Object Model,),,名詞解釋,UUID/GUID: Universally/Global,6,§,10. 2,基于,ATL,之,DLL,實(shí)現(xiàn),COM,,一、,ATL,簡(jiǎn)介,,ATL,:活動(dòng)模版庫(,Active Template Liabrary,),它是為明確創(chuàng)建,COM,對(duì)象這個(gè)目的而提供的模版類庫,它提供了對(duì)幾個(gè)接,口的內(nèi)在支持,包括,IUnknown,、,IClassFactory,、,IDispatch,,,其中:,IClassFactory,(類工廠)是為訪問一個(gè),COM,服務(wù)器(,DLL,或,EXE,)中包含多個(gè),COM,對(duì)象中的接口對(duì)象提供的接口,類。,IClassFactory,聲明如下:,,IClassFactory : public IUnknown,{,public:,virtual HRESULT STDMETHODCALLTYPE CreateInstance(,IUnknown *pUnkOuter,,REFIID riid,,void **ppvObject) = 0;,virtual HRESULT STDMETHODCALLTYPE LockServer(,BOOL fLock) = 0;,};,,說明:,IClassFactory,派生于,IUnknown,,因此它仍然支持標(biāo)準(zhǔn)的,,QueryInterface,的,COM,接口。,§10. 2 基于ATL之DLL實(shí)現(xiàn)COM 一、ATL簡(jiǎn),7,,IDispatch,(雙重接口)是為和其他語言兼容提供的接口類,,。,IDispatch,聲明如下:,,IDispatch : public IUnknown,{,public:,virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(,……,virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(,……,virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(,……,virtual HRESULT STDMETHODCALLTYPE Invoke(,/* [in] */ DISPID dispIdMember,,/* [in] */ REFIID riid,,/* [in] */ LCID lcid,,/* [in] */ WORD wFlags,,/* [out][in] */ DISPPARAMS *pDispParams,,/* [out] */ VARIANT *pVarResult,,/* [out] */ EXCEPINFO *pExcepInfo,,/* [out] */ UINT *puArgErr) = 0;,};,,說明:自定義(單)接口就是直接繼承,IUnknown,IDispatch(雙重接口)是為和其他語言兼容提供的接,8,二、利用,ATL,向?qū)Ы?COM,二、利用ATL 向?qū)ЫOM,9,注意本章使用,注意本章使用,10,步驟,1,:建立,ATL,項(xiàng)目,步驟1:建立ATL項(xiàng)目,11,COM組件編程基礎(chǔ)課件,12,COM組件編程基礎(chǔ)課件,13,說明:,,1.,允許合并代理,/,存根代碼,代理:是為遠(yuǎn)程過程調(diào)用將參數(shù)打包的一段代碼,存根:是在遠(yuǎn)程過程調(diào)用中將參數(shù)解包的一段代碼,如果你建立的,COM,(,DCOM,)需要遠(yuǎn)程訪問則選擇這,一項(xiàng)。,,2. COM + 1.0,,COM +,是微軟,COM,系統(tǒng)的最新版本且版本號(hào)是,1.0,,,“,+,”,表示對(duì)原,COM,的一些特征和服務(wù)進(jìn)行了改進(jìn)。在某,些方面,簡(jiǎn)化了某些與,COM,相關(guān)任務(wù)的屬性和服務(wù)。,,3.,如果選擇服務(wù)器類型是,“,可執(zhí)行文件,(EXE),”,則不支持,,“,MFC,”,和,“,COM + 1.0”,,4.,如果選擇服務(wù)器類型是,“,服務(wù),(EXE),”,,,則,“,允許合并,代理,/,存根代碼,”,、,“,MFC,”,和,“,COM + 1.0”,均不支持,說明:,14,COM組件編程基礎(chǔ)課件,15,步驟,2,:添加一個(gè)接口類:,IClassOne,步驟2:添加一個(gè)接口類:IClassOne,16,在此處填寫“,IClassOne”,在此處填寫“IClassOne”,17,COM組件編程基礎(chǔ)課件,18,說明:,1.,線程模型,,?,單線程:所有選擇(標(biāo)記為)單一線程模型的接口對(duì),象只能在一個(gè)線程上運(yùn)行,而且它不是別的,線程必須是所謂的主(,main,)線程。,,?,單元:?jiǎn)卧喾Q為公寓(,Apartment,),單元(公寓),是線程在內(nèi)存中運(yùn)行的區(qū)域,選擇,“,單元,”,就,表示除主線程單元外,還提供主線程單元之外,的(子)單元,而將建立的接口對(duì)象將來是在,子單元中運(yùn)行,即多個(gè)單元中的線程實(shí)例化的,多個(gè)接口對(duì)象將能夠并發(fā)運(yùn)行。,,?,自由:和單線程類似只有一個(gè)主單元(公寓),但和,單線程不同的是在這惟一的單元中可以有多個(gè),線程在執(zhí)行。,,?,兩者:?jiǎn)卧?+,自由,2.,聚合:是一個(gè)外部對(duì)象暴露內(nèi)部對(duì)象接口的過程,,說明:1. 線程模型,19,再在接口類“,IClassOne”,中添加一個(gè),接口函數(shù)“,ILoginDlg”,再在接口類“IClassOne”中添加一個(gè),20,COM組件編程基礎(chǔ)課件,21,COM組件編程基礎(chǔ)課件,22,添加的接口函數(shù)如下:,添加的接口函數(shù)如下:,23,步驟,3,:向項(xiàng)目中添加對(duì)話框資源,步驟3:向項(xiàng)目中添加對(duì)話框資源,24,COM組件編程基礎(chǔ)課件,25,COM組件編程基礎(chǔ)課件,26,對(duì)話框進(jìn)行如下設(shè)置:,*****,對(duì)話框進(jìn)行如下設(shè)置: *****,27,使用類向?qū)Ыo,對(duì)話框資源“,IDD_LOGIN_DLG,”,配置類,“,CLoginD,ialog”,使用類向?qū)Ыo對(duì)話框資源“IDD_LOGIN_DLG”,28,COM組件編程基礎(chǔ)課件,29,步驟,4,:在接口函數(shù)中添加代碼,步驟4:在接口函數(shù)中添加代碼,30,編譯生成,COM,組建,查看發(fā)布文件,編譯生成COM組建查看發(fā)布文件,31,COM組件編程基礎(chǔ)課件,32,其中,DEF,文件中,4,個(gè)函數(shù)的作用是:,,?DllCanUnloadNow,當(dāng)調(diào)用結(jié)束時(shí)負(fù)責(zé)卸載,COM,?DllGetClassObject,,客戶程序通過它訪問,COM,,它創(chuàng)建由,CLSID,制定類型的對(duì),象,該對(duì)象就是在客戶程序中調(diào)用,CoCreateInstance(),中請(qǐng)求對(duì)象,的類工廠。,,?,DllRegisterServer,,在注冊(cè)表中注冊(cè)該,COM,組件(服務(wù)器),注意:當(dāng)在命令行中執(zhí)行,regsvr32,命令時(shí)調(diào)用該函數(shù),,例如:,regsvr32,,D:,\ComDll\ComDll\Debug\ComDll.dll,,?,DllUnregisterServer,從注冊(cè)表中卸載該,COM,組件(服務(wù)器),,注意:當(dāng)在命令行中執(zhí)行,regsvr32,命令時(shí)調(diào)用該函數(shù),,,例如:,regsvr32 -u,,D:\ComDll\ComDll\Debug\ComDll.dll,說明:,ATL,是自注冊(cè)的,即在生成,DLL,或,EXE,時(shí)自動(dòng)組冊(cè),其中DEF文件中4個(gè)函數(shù)的作用是:,33,COM組件編程基礎(chǔ)課件,34,測(cè)試程序之建立,測(cè)試程序之建立,35,COM組件編程基礎(chǔ)課件,36,COM組件編程基礎(chǔ)課件,37,COM組件編程基礎(chǔ)課件,38,為“測(cè)試,ComOneDll”,菜單項(xiàng)添加消息映射函數(shù),為“測(cè)試ComOneDll”菜單項(xiàng)添加消息映射函數(shù),39,在函數(shù)中添加代碼,在函數(shù)中添加代碼,40,WINOLEAPI CoCreateInstance(,REFCLSID rclsid,,LPUNKNOWN pUnkOuter,,DWORD dwClsContext,,REFIID riid, //,接口標(biāo)識(shí)符,LPVOID FAR* ppv); //,返回指向借口函數(shù)的指針,其中:,API,函數(shù),CoCreateInstance,的作用是調(diào)用,COM,,返回指向接口,函數(shù)的指針。實(shí)際是負(fù)責(zé)調(diào)用,DEF,文件中給出的,,DllGetClassObject(),實(shí)例化組件對(duì)象 (類工廠)的函數(shù)。,,? rclsid,:,DllGetClassObject(),函數(shù)用該類標(biāo)識(shí)符實(shí)例化組件對(duì)象,,? pUnkOuter,:,COM,的,IUnknown,,用,ATL,生成的,COM,取值,NULL,? dwClsContext,:表明,COM,服務(wù)器程序運(yùn)行所在的上下文,(,環(huán)境,),,這,個(gè)參數(shù)指定了包含被請(qǐng)求,COM,的服務(wù)器程序類型。,,dwClsContext,取值范圍有,6,個(gè),在這里僅給出與我們編程有關(guān)的,3,個(gè),,CLSCTX_INPROC_SERVER,:,COM,服務(wù)器程序是一個(gè),DLL,,表明,COM,與客戶程序運(yùn)行在同一進(jìn)程中,CLSCTX_LOCAL_SERVER,:,COM,服務(wù)器程序是一個(gè),EXE,,表明,COM,程序運(yùn)行在一個(gè)單獨(dú)的進(jìn)程中,,CLSCTX_ALL,:代表任何一種均可以,API,函數(shù),CoCreateInstance,原形如下:,WINOLEAPI CoCreateInstance( 其,41,編譯、運(yùn)行結(jié)果,編譯、運(yùn)行結(jié)果,42,regsvr32 e:\ALTCOM08\AltToCom1\Debug\AltToCom1.dll,手工注冊(cè),:,開始,─,?,運(yùn)行,regsvr32 e:\ALTCOM08\AltToCom1,43,§,10. 3,基于,ATL,之,EXE,文件實(shí)現(xiàn),COM,§10. 3 基于ATL之EXE文件實(shí)現(xiàn)COM,44,步驟,1,:建立,ATL,項(xiàng)目,步驟1:建立ATL項(xiàng)目,45,COM組件編程基礎(chǔ)課件,46,COM組件編程基礎(chǔ)課件,47,COM組件編程基礎(chǔ)課件,48,步驟,2,:向項(xiàng)目中添加對(duì)話框資源,步驟2:向項(xiàng)目中添加對(duì)話框資源,49,COM組件編程基礎(chǔ)課件,50,COM組件編程基礎(chǔ)課件,51,COM組件編程基礎(chǔ)課件,52,COM組件編程基礎(chǔ)課件,53,COM組件編程基礎(chǔ)課件,54,COM組件編程基礎(chǔ)課件,55,步驟,3,:構(gòu)造窗口類,首先向項(xiàng)目中添加一個(gè),C++,類,步驟3:構(gòu)造窗口類,56,COM組件編程基礎(chǔ)課件,57,在,MyWindow.h,文件中添加代碼構(gòu)造窗口類及關(guān)聯(lián)類,在MyWindow.h文件中添加代碼構(gòu)造窗口類及關(guān)聯(lián)類,58,COM組件編程基礎(chǔ)課件,59,COM組件編程基礎(chǔ)課件,60,在主函數(shù)(,main,)中添加利用,CMyWindow,類建立窗口的代碼,在主函數(shù)(main)中添加利用CMyWindow類建立窗口的,61,編譯(編譯后自動(dòng)運(yùn)行),編譯(編譯后自動(dòng)運(yùn)行),62,COM組件編程基礎(chǔ)課件,63,COM組件編程基礎(chǔ)課件,64,步驟,4,:在項(xiàng)目中添加一個(gè)接口類,步驟4:在項(xiàng)目中添加一個(gè)接口類,65,COM組件編程基礎(chǔ)課件,66,COM組件編程基礎(chǔ)課件,67,COM組件編程基礎(chǔ)課件,68,COM組件編程基礎(chǔ)課件,69,生成的接口函數(shù),生成的接口函數(shù),70,向接口函數(shù)中添加代碼,向接口函數(shù)中添加代碼,71,查看發(fā)布文件,查看發(fā)布文件,72,測(cè)試程序之建立,測(cè)試程序之建立,73,COM組件編程基礎(chǔ)課件,74,添加代碼,添加代碼,75,編譯、運(yùn)行,編譯、運(yùn)行,76,COM組件編程基礎(chǔ)課件,77,COM組件編程基礎(chǔ)課件,78,

注意事項(xiàng)

本文(COM組件編程基礎(chǔ)課件)為本站會(huì)員(20****08)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲