передача структуры в метод IDispatch

В стороннем COM-модуле я должен передать структуру методу.

Важные части определения IDL выглядят следующим образом:

interface ITheirInterface : IDispatch {
    [id(0x0000012d)]
    HRESULT TheirMethod([in] TheirStruct Attributes);
};

struct TheirStruct {
    BSTR TheirFieldA;
    BSTR TheirFieldB;
} TheirStruct;

Как мне вызвать метод из C++ с помощью ATL?

CComPtr<IDispatch> comPtr; 
comPtr.CoCreateInstance(L"theirModule.TheirCoClass");
CComVariant returnValue;
CComVariant attribute= I_DO_NOT_KNOW_WHAT_TO_PLACE_HERE;
comPtr.Invoke1(T2COLE(L"TheirMethod"),&attribute,&returnValue);

person Jan    schedule 19.01.2011    source источник


Ответы (1)


Поддержка автоматизации COM для структур очень слабая, CComVariant не поддерживает ее напрямую. Вам нужно использовать IRecordInfo и создать вариант типа VT_RECORD. Получите указатель интерфейса IRecordInfo из GetRecordInfoFromTypeInfo или GetRecordInfoFromGuids. Удачи.

person Hans Passant    schedule 19.01.2011
comment
Немного погуглив, я нашел немецкую статью в MSDN msdn.microsoft.com/ de-de/library/bb979533.aspx Я думаю, последний список делает то, что вы объясняете. Я прав? - person Jan; 20.01.2011
comment
Да, обратите внимание на вызов GetRecordInfoFromGuids. - person Hans Passant; 20.01.2011