COM - вернуть массив объектных интерфейсов - PullRequest
3 голосов
/ 08 сентября 2011

Я хочу вернуть из IDL массив интерфейсов.Я пытаюсь это:

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

Я получаю это предупреждение (в VS 2010): Предупреждение 1 предупреждение MIDL2456: SAFEARRAY (указатель интерфейса) не работает с использованием посредника, сгенерированного midl: [Параметр 'result' of Process 'GetPolicyList '(Интерфейс' ISecurityPolicy ')]]

Является ли это поддельным предупреждением, которое может предложить http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/84a632a9-4e29-4a95-8da7-f7aedb650339?

1 Ответ

2 голосов
/ 13 сентября 2011

Объявление этого как:

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

немного упрощает реализацию интерфейса. Тем не менее, это может быть лучшей идеей, вместо того, чтобы возвращать вызывающему массиву массив интерфейсов, чтобы он возвращал ему итератор над «коллекцией».

...