タイトルで説明します。C ++/CLIラッパーを作成しているネイティブC++dllがあります。これは、参照としてC#にインポートされます。
問題は、C#ではラッパー(DLLからインポートされた)にあるクラスが表示されないことです。
ネイティブC++オブジェクトをC#で表示されるように再宣言するには、どのキーワードを使用する必要がありますか?
よし、チュートリアル。C# に公開するC++ クラスNativeClass
があります。
class NativeClass {
public:
void Method();
};
1) C++/CLI プロジェクトを作成します。C++ ライブラリとヘッダーにリンクします。
2) 必要なメソッドを公開するラッパー クラスを作成します。例:
#include "NativeClass.h"
public ref class NativeClassWrapper {
NativeClass* m_nativeClass;
public:
NativeClassWrapper() { m_nativeClass = new NativeClass(); }
~NativeClassWrapper() { this->!NativeClassWrapper(); }
!NativeClassWrapper() { delete m_nativeClass; }
void Method() {
m_nativeClass->Method();
}
};
3) C# プロジェクトに C++/CLI プロジェクトへの参照を追加します。
4) using ステートメント内でラッパー タイプを使用します。
using (var nativeObject = new NativeClassWrapper()) {
nativeObject.Method();
}
using ステートメントにより、Dispose() が確実に呼び出され、デストラクタがすぐに実行され、ネイティブ オブジェクトが破棄されます。そうしないと、メモリリークが発生し、おそらく恐ろしく死ぬでしょう(あなたではなく、プログラムです)。注: Dispose() メソッドは魔法のように作成されます。