COM-返回对象接口数组

COM-返回对象接口数组,com,idl,Com,Idl,我想从IDL返回一组接口。 我试试这个: interface ISecurityPolicy : IDispatch{ [id(6)] HRESULT GetPolicyList([out, ref, retval] SAFEARRAY(IEntityPolicy*)* result); } 我收到以下警告(在VS 2010中): 警告1警告MIDL2456:使用midl生成的代理时,SAFEARRAY(接口指针)无法工作:[过程“GetPolicyList”(接口“ISec

我想从IDL返回一组接口。 我试试这个:

interface ISecurityPolicy : IDispatch{
[id(6)]          HRESULT GetPolicyList([out, ref, retval] SAFEARRAY(IEntityPolicy*)* result);
}
我收到以下警告(在VS 2010中): 警告1警告MIDL2456:使用midl生成的代理时,SAFEARRAY(接口指针)无法工作:[过程“GetPolicyList”(接口“ISecurityPolicy”)的参数“result”]

这是一个虚假的警告吗?

声明如下:

interface ISecurityPolicy : IDispatch{
[id(6)]          HRESULT GetPolicyList([out, ref, retval] SAFEARRAY(IUnknown*)* result);
}
为接口的实现简化了一些事情。
这仍然是一个更好的主意,但不是将一个接口数组返回给调用方,以在“集合”上返回一个迭代器。

删除[ref]属性,这没有多大意义。恐怕我仍然会收到警告。另一方面,一切正常,您只需将返回类型调整为SAFEARRAY(IUnknown*)*,以使事情更简单。不过,对于我来说,为相同的提议使用集合实现可能是一个更好的主意。这将更加清楚,只有更多的工作要做:-)