将结构传递到IDISPATCH方法
-
12-10-2019 - |
题
在第三方COM模块中,我必须将结构传递给方法。
IDL定义的重要部分看起来像:
interface ITheirInterface : IDispatch {
[id(0x0000012d)]
HRESULT TheirMethod([in] TheirStruct Attributes);
};
struct TheirStruct {
BSTR TheirFieldA;
BSTR TheirFieldB;
} TheirStruct;
我如何使用ATL调用C ++的方法?
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的变体。从getRecordInfromTypeinfo或getRecordInfromguids获取irecordinfo接口指针。祝你好运。
不隶属于 StackOverflow