2011-01-19 35 views
3

第三者COMモジュールでは、メソッドに構造体を渡す必要があります。構造体をIDispatchメソッドに渡す

このような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); 

答えて

4

構造のCOM自動化サポートは非​​常に弱いですが、CComVariantはそれを直接サポートしていません。 IRecordInfoを使用して、タイプVT_RECORDのバリアントを登録する必要があります。 GetRecordInfoFromTypeInfoまたはGetRecordInfoFromGuidsからIRecordInfoインターフェイスポインタを取得します。がんばろう。

+0

MSDNでドイツ語の記事が見つかりました。http://msdn.microsoft.com/de-de/library/bb979533.aspx私は、最後のリストは、あなたが何を説明しているのかと思います。私は正しい? – Jan

+0

うわー、GetRecordInfoFromGuidsの呼び出しに注意してください。 –

関連する問題