我想从 IDL 返回一组接口。我试试这个:
interface ISecurityPolicy : IDispatch{
[id(6)] HRESULT GetPolicyList([out, ref, retval] SAFEARRAY(IEntityPolicy*)* result);
}
Run Code Online (Sandbox Code Playgroud)
我收到此警告(在 VS 2010 中):警告 1 警告 MIDL2456:SAFEARRAY(接口指针)无法使用 midl 生成的代理工作:[过程“GetPolicyList”的参数“结果”(接口“ISecurityPolicy”)]
这是一个虚假警告,正如http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/84a632a9-4e29-4a95-8da7-f7aedb650339可能建议的那样?
将此声明为:
interface ISecurityPolicy : IDispatch{
[id(6)] HRESULT GetPolicyList([out, ref, retval] SAFEARRAY(IUnknown*)* result);
}
Run Code Online (Sandbox Code Playgroud)
稍微简化了接口的实现。尽管不是向调用者返回一个接口数组来返回“集合”上的迭代器,但这仍然可能是一个更好的主意。