當(dāng)前位置首頁 > 計算機 > 編程與開發(fā)語言
搜柄,搜必應(yīng)! 快速導(dǎo)航 | 使用教程

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

文檔格式:PPT| 78 頁|大小 3.64MB|積分 20|2024-12-13 發(fā)布|文檔ID:253396717
第1頁
第2頁
第3頁
下載文檔到電腦,查找使用更方便 還剩頁未讀,繼續(xù)閱讀>>
1 / 78
此文檔下載收益歸作者所有 下載文檔
  • 版權(quán)提示
  • 文本預(yù)覽
  • 常見問題
  • 單擊此處編輯母版標題樣式,,,*,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,,,,,,,,,單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,,,*,§,10. 1 COM,簡介,一、什么是,COM,,COM,(,Component Object Model,): 組件對象模型,,其中:,1.,它定義了一套為構(gòu)建一個組件所必需遵循的規(guī)則或,者說它是一個說明如何建立可動態(tài)交替更新組件的規(guī),范,該規(guī)范為客戶和組件提供保證能夠互操作應(yīng)該遵,循的標準;,2.,它定義了組件和它們的客戶之間互相作用的方式采,用客戶進程直接調(diào)用組件中的方法,使得組件和客戶,端無需任何中介組件就能互相聯(lián)系;,,3. COM,組件有可執(zhí)行代碼組成,即以二進制代碼形,式重用,一般通過,DLL/EXE,形式發(fā)布,且通過,GUID,來保證每個,COM,對象是全球唯一的§10. 1 COM簡介一、什么是COM,1,說明:,,1. COM,不是一類程序的擴展名,也不是一種程序設(shè)計,語言;,,2. COM,可利用,DLL,來給組件提供動態(tài)鏈接的能力,但,COM,不是,DLL,;,,3. COM,可采用各種語言進行編寫(語言無關(guān)性),同一,個軟件中不同組件可以使用不同的語言和工具開發(fā),;,,4. COM,是由,OLE,(對象連接與嵌入)技術(shù)發(fā)展而來,,COM,技術(shù)的目的是為開發(fā)、維護應(yīng)用程序提供高效靈,活手段,,說明:,2,二、,COM,服務(wù)器、,COM,對象、,COM,接口和函數(shù)的關(guān)系,,1.,一個,COM,服務(wù)器(,DLL,或,EXE,)可以包含若干個,COM,對象;,2.,一個,COM,對象可以包含若干個接口;,3.,一個接口可以包含若干個函數(shù)。

    COM,服務(wù)器,,,,,,,,,,,COM,對象,1,,,,,,,,,,,接口,1,,,,,函數(shù),1,函數(shù),2,接口,2,,,函數(shù),1,,COM,對象,2,,,,,,,,,接口,1,,,,,,,函數(shù),1,函數(shù),2,函數(shù),3,二、COM服務(wù)器、 COM對象、COM接口和函數(shù)的關(guān)系COM,3,,IInterface_1,IInterface_2,COM,服務(wù)器,,,,,,,,,,,,接口對象,1,,,,,函數(shù),1,函數(shù),2,接口對象,2,,,函數(shù),1,IUnknown,說明:一般將,COM,對象表示為帶固定格式的圓形接頭,,每個接頭表示一個對外提供的接口,,IUnknown,接,口處首要地位,.,IInterface_1IInterface_2COM服務(wù)器,4,三、,接口,,1. COM,接口提供訪問對象的一種方式,應(yīng)用程序只能通過一個接,口指針訪問對象的函數(shù)COM,接口由一個,全 局唯一標識符,(,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,通過接口標識符,riid,查詢(確定)接口,返回,指向接口的指針的指針,同時調(diào)用,AddRef(),;,,⑵,AddRef,和,Release,用來管理對象接口被訪問的參數(shù)計數(shù)。

    調(diào)用這兩種方法的規(guī)則為:設(shè),N,為接口被訪問的計數(shù)器?,無論何時客戶接收到接口指針時,必須調(diào)用,AddRef,:,N++,?,無論何時客戶完成使用接口指針時,必須調(diào)用,Release,:,N- -,其目的是管理被使用的,COM,何時能夠被釋放:當(dāng),N=0,時,三、接口,5,,UUID/GUID,:,Universally/Globals Unique IDentifiers,,通用,/,全局(球)唯一標識符(,128,位,,16,字節(jié),,,,32,個字符),,GUID,的格式為:,“,xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每個,x,是,0-9,或,A-F,范圍內(nèi)的一個十六進制的數(shù)字例如:,97AD6FA3-8CAD-4068-90AE-320545A1E8C8,,即為有效的,GUID,值,CLSID,:,COM,類標識符(,CLASS Identifiers,),LIBID,:類型庫標識符(,type LIBrary Identifier,),IID,:接口標識符(,Interface Identifiers,),ProgID,:,Programmer IDentifiers,,程序員給,CLSID,指定的一個程序員易記的名稱,根據(jù)約定,, ProgID,格式如下,:, . . ,IDL,:接口定義語言(,Interface Definition Language,),DCOM,:分布式組建對象模型(,Distributed Component Object Model,),,名詞解釋,UUID/GUID: Universally/Global,6,§,10. 2,基于,ATL,之,DLL,實現(xiàn),COM,,一、,ATL,簡介,,ATL,:活動模版庫(,Active Template Liabrary,),它是為明確創(chuàng)建,COM,對象這個目的而提供的模版類庫,它提供了對幾個接,口的內(nèi)在支持,包括,IUnknown,、,IClassFactory,、,IDispatch,,,其中:,IClassFactory,(類工廠)是為訪問一個,COM,服務(wù)器(,DLL,或,EXE,)中包含多個,COM,對象中的接口對象提供的接口,類。

    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,,因此它仍然支持標準的,,QueryInterface,的,COM,接口§10. 2 基于ATL之DLL實現(xiàn)COM 一、ATL簡,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,項目,步驟1:建立ATL項目,11,COM組件編程基礎(chǔ)課件,12,COM組件編程基礎(chǔ)課件,13,說明:,,1.,允許合并代理,/,存根代碼,代理:是為遠程過程調(diào)用將參數(shù)打包的一段代碼,存根:是在遠程過程調(diào)用中將參數(shù)解包的一段代碼,如果你建立的,COM,(,DCOM,)需要遠程訪問則選擇這,一項。

    2. COM + 1.0,,COM +,是微軟,COM,系統(tǒng)的最新版本且版本號是,1.0,,,“,+,”,表示對原,COM,的一些特征和服務(wù)進行了改進在某,些方面,簡化了某些與,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,:添加一個接口類:,IClassOne,步驟2:添加一個接口類:IClassOne,16,在此處填寫“,IClassOne”,在此處填寫“IClassOne”,17,COM組件編程基礎(chǔ)課件,18,說明:,1.,線程模型,,?,單線程:所有選擇(標記為)單一線程模型的接口對,象只能在一個線程上運行,而且它不是別的,線程必須是所謂的主(,main,)線程?,單元:單元亦稱為公寓(,Apartment,),單元(公寓),是線程在內(nèi)存中運行的區(qū)域,選擇,“,單元,”,就,表示除主線程單元外,還提供主線程單元之外,的(子)單元,而將建立的接口對象將來是在,子單元中運行,即多個單元中的線程實例化的,多個接口對象將能夠并發(fā)運行。

    ?,自由:和單線程類似只有一個主單元(公寓),但和,單線程不同的是在這惟一的單元中可以有多個,線程在執(zhí)行?,兩者:單元,+,自由,2.,聚合:是一個外部對象暴露內(nèi)部對象接口的過程,,說明:1. 線程模型,19,再在接口類“,IClassOne”,中添加一個,接口函數(shù)“,ILoginDlg”,再在接口類“IClassOne”中添加一個,20,COM組件編程基礎(chǔ)課件,21,COM組件編程基礎(chǔ)課件,22,添加的接口函數(shù)如下:,添加的接口函數(shù)如下:,23,步驟,3,:向項目中添加對話框資源,步驟3:向項目中添加對話框資源,24,COM組件編程基礎(chǔ)課件,25,COM組件編程基礎(chǔ)課件,26,對話框進行如下設(shè)置:,*****,對話框進行如下設(shè)置: *****,27,使用類向?qū)Ыo,對話框資源“,IDD_LOGIN_DLG,”,配置類,“,CLoginD,ialog”,使用類向?qū)Ыo對話框資源“IDD_LOGIN_DLG”,28,COM組件編程基礎(chǔ)課件,29,步驟,4,:在接口函數(shù)中添加代碼,步驟4:在接口函數(shù)中添加代碼,30,編譯生成,COM,組建,查看發(fā)布文件,編譯生成COM組建查看發(fā)布文件,31,COM組件編程基礎(chǔ)課件,32,其中,DEF,文件中,4,個函數(shù)的作用是:,,?DllCanUnloadNow,當(dāng)調(diào)用結(jié)束時負責(zé)卸載,COM,?DllGetClassObject,,客戶程序通過它訪問,COM,,它創(chuàng)建由,CLSID,制定類型的對,象,該對象就是在客戶程序中調(diào)用,CoCreateInstance(),中請求對象,的類工廠。

    ?,DllRegisterServer,,在注冊表中注冊該,COM,組件(服務(wù)器),注意:當(dāng)在命令行中執(zhí)行,regsvr32,命令時調(diào)用該函數(shù),,例如:,regsvr32,,D:,\ComDll\ComDll\Debug\ComDll.dll,,?,DllUnregisterServer,從注冊表中卸載該,COM,組件(服務(wù)器),,注意:當(dāng)在命令行中執(zhí)行,regsvr32,命令時調(diào)用該函數(shù),,,例如:,regsvr32 -u,,D:\ComDll\ComDll\Debug\ComDll.dll,說明:,ATL,是自注冊的,即在生成,DLL,或,EXE,時自動組冊,其中DEF文件中4個函數(shù)的作用是:,33,COM組件編程基礎(chǔ)課件,34,測試程序之建立,測試程序之建立,35,COM組件編程基礎(chǔ)課件,36,COM組件編程基礎(chǔ)課件,37,COM組件編程基礎(chǔ)課件,38,為“測試,ComOneDll”,菜單項添加消息映射函數(shù),為“測試ComOneDll”菜單項添加消息映射函數(shù),39,在函數(shù)中添加代碼,在函數(shù)中添加代碼,40,WINOLEAPI CoCreateInstance(,REFCLSID rclsid,,LPUNKNOWN pUnkOuter,,DWORD dwClsContext,,REFIID riid, //,接口標識符,LPVOID FAR* ppv); //,返回指向借口函數(shù)的指針,其中:,API,函數(shù),CoCreateInstance,的作用是調(diào)用,COM,,返回指向接口,函數(shù)的指針。

    實際是負責(zé)調(diào)用,DEF,文件中給出的,,DllGetClassObject(),實例化組件對象 (類工廠)的函數(shù)? rclsid,:,DllGetClassObject(),函數(shù)用該類標識符實例化組件對象,,? pUnkOuter,:,COM,的,IUnknown,,用,ATL,生成的,COM,取值,NULL,? dwClsContext,:表明,COM,服務(wù)器程序運行所在的上下文,(,環(huán)境,),,這,個參數(shù)指定了包含被請求,COM,的服務(wù)器程序類型dwClsContext,取值范圍有,6,個,在這里僅給出與我們編程有關(guān)的,3,個,,CLSCTX_INPROC_SERVER,:,COM,服務(wù)器程序是一個,DLL,,表明,COM,與客戶程序運行在同一進程中,CLSCTX_LOCAL_SERVER,:,COM,服務(wù)器程序是一個,EXE,,表明,COM,程序運行在一個單獨的進程中,,CLSCTX_ALL,:代表任何一種均可以,API,函數(shù),CoCreateInstance,原形如下:,WINOLEAPI CoCreateInstance( 其,41,編譯、運行結(jié)果,編譯、運行結(jié)果,42,regsvr32 e:\ALTCOM08\AltToCom1\Debug\AltToCom1.dll,手工注冊,:,開始,─,?,運行,regsvr32 e:\ALTCOM08\AltToCom1,43,§,10. 3,基于,ATL,之,EXE,文件實現(xiàn),COM,§10. 3 基于ATL之EXE文件實現(xiàn)COM,44,步驟,1,:建立,ATL,項目,步驟1:建立ATL項目,45,COM組件編程基礎(chǔ)課件,46,COM組件編程基礎(chǔ)課件,47,COM組件編程基礎(chǔ)課件,48,步驟,2,:向項目中添加對話框資源,步驟2:向項目中添加對話框資源,49,COM組件編程基礎(chǔ)課件,50,COM組件編程基礎(chǔ)課件,51,COM組件編程基礎(chǔ)課件,52,COM組件編程基礎(chǔ)課件,53,COM組件編程基礎(chǔ)課件,54,COM組件編程基礎(chǔ)課件,55,步驟,3,:構(gòu)造窗口類,首先向項目中添加一個,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,編譯(編譯后自動運行),編譯(編譯后自動運行),62,COM組件編程基礎(chǔ)課件,63,COM組件編程基礎(chǔ)課件,64,步驟,4,:在項目中添加一個接口類,步驟4:在項目中添加一個接口類,65,COM組件編程基礎(chǔ)課件,66,COM組件編程基礎(chǔ)課件,67,COM組件編程基礎(chǔ)課件,68,COM組件編程基礎(chǔ)課件,69,生成的接口函數(shù),生成的接口函數(shù),70,向接口函數(shù)中添加代碼,向接口函數(shù)中添加代碼,71,查看發(fā)布文件,查看發(fā)布文件,72,測試程序之建立,測試程序之建立,73,COM組件編程基礎(chǔ)課件,74,添加代碼,添加代碼,75,編譯、運行,編譯、運行,76,COM組件編程基礎(chǔ)課件,77,COM組件編程基礎(chǔ)課件,78,。

    點擊閱讀更多內(nèi)容
    最新文檔
    傳統(tǒng)文化道德不是高懸的明月而是腳下的星光.pptx
    世界無煙日關(guān)注青少年成長健康無煙為成長護航.pptx
    五四青年節(jié)詩詞贊歌五四青年自強不息.pptx
    XX學(xué)校班主任培訓(xùn)用心管理慧做班主任.pptx
    拒絕熬夜健康養(yǎng)生規(guī)律作息遠離亞健康.pptx
    兒童成長手冊時光里的童真印記.pptx
    幼兒園夏季傳染病預(yù)防指南預(yù)見夏天健康童行夏季傳染病預(yù)防科普.pptx
    高中生心理健康教育主題班會快樂學(xué)習(xí)高效學(xué)習(xí)正視壓力學(xué)會減壓.pptx
    員工職業(yè)道德與職業(yè)素養(yǎng)培訓(xùn)遵守職業(yè)道德提高職業(yè)修養(yǎng).pptx
    2025職業(yè)病防治法宣傳周健康守護職防同行.pptx
    XX幼兒園防災(zāi)減災(zāi)安全教育臨災(zāi)不亂安全童行學(xué)會保護自己.pptx
    在2025年縣教育工作大會暨高考備考工作推進會上的講話發(fā)言材料.docx
    在2025年縣全面從嚴治黨和黨風(fēng)廉政會議上的講話發(fā)言材料.docx
    在2025年全市慶?!拔逡弧濒邉趧幽7侗碚么髸系闹v話發(fā)言材料多篇.docx
    2025年稅務(wù)局青年代表在五四青年座談會上的發(fā)言材料3篇.docx
    在2025年市委全體會議上的主持講話發(fā)言材料.docx
    2025年黨風(fēng)廉政建設(shè)工作要點材料.docx
    在2025年全市青年干部慶祝五四青年節(jié)大會上的講話發(fā)言材料多篇.docx
    在入黨積極分子培訓(xùn)班上的講話發(fā)言材料.docx
    縣文旅局黨組書記在五一假期及夏季旅游安全生產(chǎn)工作部署會議上的講話發(fā)言材料.docx
    賣家[上傳人]:20211108
    資質(zhì):實名認證