質問

サードパーティの 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 型のバリアントを作成する必要があります。GetRecordInfoFromTypeInfo または GetRecordInfoFromGuids から IRecordInfo インターフェイス ポインターを取得します。幸運を。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top