передача структуры в метод IDispatch - PullRequest
3 голосов
/ 20 января 2011

В стороннем модуле 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);

1 Ответ

4 голосов
/ 20 января 2011

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

...