COM 微軟元件物件模型 簡介(二)

來源:互聯網
上載者:User

       當定義自己的組件時候,必須符合COM規範,即直接或間接繼承IUnknown介面,並按自己的類實現IUnknown中定義的三個函數。

 

interface IUnknown

          virtual HRESULT _stdcall QueryInterface(const IID& iid,void** ppv)=0;

          virtual ULONG _stdcall AddRef()=0;

          virtual ULONG _stdcall Release()=0;

};

 

      其中第一個QueryInterface用來查看(詢問)當前的類是否實現(支援)某個介面.其中第一個參數iid用來標識要查看的介面的一個標誌結構體.第二個參數ppv用來返回尋找到的介面指標,沒有找到為NULL,函數返回是HRESULT,可以用宏SUCCEEDED(hr)來判斷傳回值hr成功與否.

 

 

QueryInterface函數的一些實現原則:

 

         <1>QrueryInterface返回的總是同一IUnknown指標(即使直接間接繼承自多個IUnknown).

         <2>若客戶曾經擷取過某個介面,那麼它將總能擷取此介面.

         <3>客戶可以再次擷取已經擁有的介面.

         <4>客戶可以返回到起始介面.

         <5>若能夠從某個介面擷取某特定介面,那麼從任意介面都將可以擷取此介面.

 

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

 

         函數AddRef增加一個使用的執行個體(因為都是用介面使用的,所以等於增加正在使用介面(同一個對象)的數量);函數Release完成AddRef相反的過程.

         這兩個函數都是使用引用記數來完成的(和設計模式中取代指標的控制代碼的實現是類似的),

所以對於實現介面的一塊記憶體,要負責維護它自己的引用記數.

 

 

參考資料:《COM技術內幕》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.