2016-08-02 8 views
0

ネイティブC++でstructがあります。これはCOMオブジェクトに渡す必要があります。どちらも同じヘッダファイルを共有しているため、COMオブジェクトと私のコードの間に構造体定義に違いはありません。 COMメソッドは、パラメータとしてstructへのポインタを予期します。 int、float、stringなどの型をCOMにパラメーターとして渡すことができます。これは、variant_t vtArg(myIntValue)のような型に変換します。ユーザー定義の構造体をC++のバリアントに変換する方法は?

structをバリアントに変換するにはどうすればよいですか?

COMメソッドのシグネチャは、このようなものです:

bool ComMethod(HANDLE *myHandle, MyStruct *myStruct) 

これは、私はCOMメソッドの引数を構築する方法である:

SAFEARRAY *pMethodArgs = SafeArrayCreateVector(VT_VARIANT, 0, 2); 
LONG index = 0;  
SafeArrayPutElement(pMethodArgs, &index, &myHandle); 
index = 1; 
SafeArrayPutElement(pMethodArgs, &index, &myStruct); 
+0

COMコールの両側にネイティブC++があるような音... COMを使用する理由は何ですか? – Niall

+0

アプリケーションレベルではいくつかのことが関係しています。だから、それはCOMコールです。 –

+0

'PVOID byref;'メンバーがあります。あなたはそれを使うことができます。しかし、COMアプリケーションの残りの非Cコードおよび非C++コードと互換性がない可能性があります。最良の方法は、すべての方法を行って、別のCOMオブジェクトに構造体をラップすることがあります。 – Niall

答えて

0

私は複数の方法を試してみましたが、それが不可能であることがわかりましたパラメータとしてMyStructを送信します。私はCOMメソッドをMyStructのインスタンスを返し、C++でリバースエンジニアリングしようとしましたが、残念ながらC++で何も受信されませんでした。

解決策は、構造の個々のメンバーを持つSAFEARRAYVARIANTを作成するか、個々のメンバーを別々のパラメーターとして渡すことです。

関連する問題