Передача структуры в метод Idispatch
-
12-10-2019 - |
Вопрос
В стороннем модуле 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);
Решение
Поддержка автоматизации COM для структур очень слаба, CComvariant не поддерживает ее напрямую. Вам нужно использовать Irecordinfo и создать вариант типа vt_record. Получите указатель интерфейса Irecordinfo от GetRecordInfOfromtypeinfo или getRecordinfOfromGuids. Удачи.
Не связан с StackOverflow