日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

COM(组件对象模型)

發(fā)布時間:2024/4/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 COM(组件对象模型) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

COM :創(chuàng)建和使用組件標準

(DLL:COM的一種實現(xiàn))

任何程序都由若干組件構成

??????

組件:實現(xiàn)接口功能

???????

組件特點:(1)動態(tài)鏈接 (2)隱藏(內(nèi)部)實現(xiàn)(實現(xiàn)語言,實現(xiàn)邏輯)

??????

COM最終目的:動態(tài)替換組件

????

COM庫(COM Library):支持組件管理

?????

外部程序/組件 只通過接口訪問組件

????

外部程序/組件只能通過查詢接口(QueryInterface)了解組件支持的接口

?????

查詢接口(QueryInterface)規(guī)則:

(1)(同一組件)總是返回同一IUnknow 指針

(2)外部可獲得曾獲得接口

(3)外部可再次獲得已獲得接口

(4)外部可返回起始接口

(5)可從任意接口獲得已獲得接口

????? ????????

接口引用計數(shù)規(guī)則:

(1)返回(接口指針)之前AddRef:返回接口指針的函數(shù)內(nèi)部

(2)(接口指針)賦值之后AddRef

(3)使用完(接口)之后Release

????

組件使用過程?

(1)創(chuàng)建組件對象(CreateInstance):返回IUnknow指針

(2)通過IUnknow指針查詢組件中接口(QueryInterface):根據(jù)接口ID(IID)返回接口指針

???????

--------------------------------------------------------------------------------------------------------

COM的實現(xiàn) : DLL

???

win32使用(只含純虛函數(shù)的)結構體(struct)表示接口(interface)

#define interface struct

????

(通過)接口指針 調(diào)用接口函數(shù):多態(tài)調(diào)用 實現(xiàn)函數(shù)(實現(xiàn)對象+虛表 / 靜態(tài)實現(xiàn)函數(shù))

???? ?

多態(tài):按同一種方式處理不同的對象

????

接口定義了一種內(nèi)存結構,實現(xiàn)類繼承這個結構

接口定義了實現(xiàn)類的虛表結構

?????

接口繼承接口, 類實現(xiàn)接口

?????

所有接口 繼承 IUnknow接口(查詢接口+控制生命周期)

??? interface IUnknow {

??????? virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppInterface) = 0;//查詢組件接口

??????? virtual ULONG __stdcall AddRef() = 0;

??????? virtual ULONG __stdcall Release() = 0;

??? }

一個組件只有一個IUnknow接口

???????

通過類工廠創(chuàng)建組件對象,查詢接口

CoCreateInstance (const CLSID& clsid, IUnknown*, DWORD, const IID& iid, void** ppInterface)

(1)CoGetClassObject (const CLSID& clsid, DWORD, COSERVERINFO*, IID_IClassFactory , void** ppInterface)

?? 創(chuàng)建類工廠對象 ???? 獲取類工廠接口(IClassFactory)

(2)pIClassFactory->CreateInstance (IUnknown*, const IID&, void** ppInterface);

??? 創(chuàng)建組件對象,查詢接口

???????

DLL:進程內(nèi)組件

EXE:進程外組件?

?????

????? ?

總結

以上是生活随笔為你收集整理的COM(组件对象模型)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。