2011-09-08 87 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); 
} 

简化事情有点对接口的实现。 它可能仍然是一个更好的主意,虽然而不是返回一个接口的数组调用返回一个迭代器“集合”。

相关问题