将结构传递给IDispatch方法

时间:2011-01-19 22:55:47

标签: windows visual-c++ com atl idispatch

在第三方COM模块中,我必须将结构传递给Method。

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);

1 个答案:

答案 0 :(得分:4)

对结构的COM自动化支持非常弱,CComVariant不直接支持它。您需要使用IRecordInfo并创建VT_RECORD类型的变体。从GetRecordInfoFromTypeInfo或GetRecordInfoFromGuids获取IRecordInfo接口指针。祝你好运。