2012-05-26 66 views
0

我需要繼承抽象方法的接口, 在VB/C#中,我們只需覆蓋從我們的接口中的方法,而沒有必要的IUnknown或IDispatch方法編寫繼承接口及的IUnknown,IDispatch方法定義

但在C++中,在 類繼承接口在接口, &覆蓋方法後,當我試圖實例派生類 我得到以下錯誤

error C2259: 'Imyinterface' : cannot instantiate abstract class 
1>   due to following members: 



'HRESULT IUnknown::QueryInterface(const IID &,void **)' : is abstract 
'ULONG IUnknown::AddRef(void)' : is abstract 
'ULONG IUnknown::Release(void)' : is abstract 

所以我需要重寫/ d efine IUnknown和IDispatch方法,例如addref,Release,QueryInterface,invoke,gettypeinfo

因爲它們似乎是標準函數,我可以在哪裏獲取它們的代碼/定義,例如ATL或orl typelib? 或任何可以獲得上述方法的代碼/示例的參考

+0

我添加了COM標籤,因爲這個問題似乎與COM密切相關。 – juanchopanza

+0

http://msdn.microsoft.com/en-us/library/c43h4867.aspx –

回答

0

您需要覆蓋這些方法並提供它們的定義(在您的派生類中)以及所有在您的基類中聲明爲純虛函數。
除非你這樣做,否則你的派生類也作爲一個抽象類,你不能創建它的任何對象。

對於第二個問題,沒有我沒有任何真正的好主意,這些方法的標準實現應該做什麼。

+0

謝謝你,你知道我在哪裏可以找到他們的定義/任何例子? – user1176743

0

QueryInterface如果可以到達傳入的GUID所標識的接口,則將指針指向void **參數中的接口;否則將void **設置爲NULL。返回相應的HRESULT

AddRef:增加接口的引用計數。

Release:減少接口的引用計數。

我會建議在深入研究之前先寫一本關於COM的好書。使用的Inside Com (Microsoft Programming Series) by Dale Rogerson副本很便宜。它確實有例子。閱讀亞馬遜的評論,看看你是否想購買這本書。

+0

謝謝,對於圖書的參考,它是否有代碼或例子?,因爲我已經通過幾本書來解釋機制,但沒有可靠的代碼/例子。 – user1176743