2011-09-08 79 views
3

我想從IDL返回一個接口數組。 我試試這個:COM - 返回一個對象接口數組

interface ISecurityPolicy : IDispatch{ 
[id(6)]   HRESULT GetPolicyList([out, ref, retval] SAFEARRAY(IEntityPolicy*)* result); 
} 

我得到這樣的警告(在VS 2010): 警告1個警告MIDL2456:[參數 '結果' 程序':SAFEARRAY(接口指針)不使用MIDL生成的代理工作GetPolicyList'(Interface'ISecurityPolicy')]

這是一個虛假的警告,因爲http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/84a632a9-4e29-4a95-8da7-f7aedb650339可能暗示?

+0

刪除[ref]屬性,沒有多大意義。 –

+0

恐怕我仍然得到這個警告。另一方面,事情是有效的,你只需要將返回類型調整爲SAFEARRAY(IUnknown *)*以使事情變得更容易 – Ghita

+0

儘管如此,對我來說,使用集合實現可能是一個更好的主意。這將更清楚,只有更多的工作要做:-) – Ghita

回答

2

聲明此爲:

interface ISecurityPolicy : IDispatch{ 
[id(6)]   HRESULT GetPolicyList([out, ref, retval] SAFEARRAY(IUnknown*)* result); 
} 

簡化事情有點對接口的實現。 它可能仍然是一個更好的主意,雖然而不是返回一個接口的數組調用返回一個迭代器「集合」。