タイトルの説明。 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()メソッドは魔法のように作成されます 。