2010-01-26 58 views
2

如何在COM中創建一個返回指向接口的指針的方法,這需要在IDL文件中完成。COM - 如何創建一個返回指向接口的指針的方法?

編輯:

如何在類中實現這一點:

STDMETHODIMP CBlah::get_Something(IOtherBlah** retval){ 
return m_protectedvar->QueryInterface(retval); 
} 
STDMETHODIMP CBlah::put_Somthing(IOtherBlah* rhs){ 
m_protectedvar = rhs; 
return S_OK; 
} 

以上不工作。我收到以下錯誤:

cannot instantiate abstract class with[ Base=Blah ] due to following members: 
'HRESULT IBlah::putref_Something(IOtherBlah*)' : is abstract 

回答

2
[ attributes here...] 
interface IBlah : IDispatch { 
    [id(1), propget] HRESULT Something([out,retval] IOtherBlah** retval); 
    [id(1), propputref] HRESULT Something([in] IOtherBlah* rhs); 
}; 
+0

@Phill - 您爲什麼取消標記答案?你還需要什麼? – 2010-01-26 16:02:44

+0

我收到錯誤,請參閱編輯 – 2010-01-26 16:33:18

+0

您必須編寫putref_Something(),而不是put_Somthing()。 – 2010-01-26 16:39:51

5

事情是這樣的:

interface IYourInterface { 
    HRESULT GetPointer([out, retval]IInterface**); 
}; 

呼叫者將這樣稱呼它:

IInterface* pointer = 0; 
HRESULT hr = yourInterfacePointer->GetPointer(&pointer); 
+0

試圖做一個對get/set方法,一個設置對象,一個獲取指向對象/接口的指針 – 2010-01-26 13:44:24

+0

沒問題,在其他答案中使用用戶nobugz的片段。 – sharptooth 2010-01-26 14:27:05

+0

感謝您在正確方向的幫助 – 2010-01-26 15:55:57