39

タイトルで説明します。C ++/CLIラッパーを作成しているネイティブC++dllがあります。これは、参照としてC#にインポートされます。

問題は、C#ではラッパー(DLLからインポートされた)にあるクラスが表示されないことです。

ネイティブC++オブジェクトをC#で表示されるように再宣言するには、どのキーワードを使用する必要がありますか?

4

1 に答える 1

79

よし、チュートリアル。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() メソッドは魔法のように作成されます

于 2012-04-19T08:04:34.157 に答える