1

アンマネージ C++ コードから C# に shared_ptr をマーシャリングするにはどうすればよいですか?

新しい MyObject を割り当て、shared_ptr を介してそれへのポインターを返す C++ の関数 (C バインディングを介して公開) があります。

C++ では、次の関数を呼び出すことができます。

MyObjHandle* ref = NULL:
GetMyObject(&ref); // double ptr...

MyObjHandle が定義されている場所:

typedef struct obj_t {

   shared_ptr<MyObject> objPtr;

} MyObjHandle ;

C# から GetMyObject への呼び出しを PInvoke するにはどうすればよいですか? メンバ objPtr を IntPtr として定義したことを除いて、構造 MyObjectHandle を C# とほとんど同じように定義するだけでした。それは AccessViolationException エラーで惨めに失敗しました。失敗した他のいくつかの PInvoke バリエーションを試しました。shared_ptr と C# との相互運用性のサンプルが見つからないようです。助けていただければ幸いです...

4

1 に答える 1

0

C# では、MyObjHandle を IntPtr としてのみ取得できます。構造内の内部 objPtr にアクセスすることはできません。pinvoke シグネチャは次のようになります。

// 必要に応じて戻り値の型を調整 [DllImport(...)] int GetMyObject(out IntPtr pMyObjHandle);

次に、pMyObjHandle を、MyObjHandle* をパラメーターとして期待する他の pinvoke メソッドに戻すことができます。

于 2011-02-18T04:19:02.113 に答える