1) はい、C++/CLI が必要です
2) いいえ、メソッドごとにラッパー クラスを作成する必要はありません。C++ (ネイティブ) クラスごとにラッパー クラスを 1 つだけ作成する必要があります。インターフェイスを宣言するのと似ています。
アンマネージ C++ を C++/CLI でラップする - 適切なアプローチ
はメソッドが 1 つだけの例ですが、C++ で記述された NativeType 型のクラスに別のメソッドがある場合、たとえば次のようになります。
void Method2()
ちょうど同じクラスだった
void ManagedMethod2()
{ NativePtr->Method2(); }
したがって、ラッパー クラス全体は次のようになります。 #include "NativeType.h"
public ref class ManagedType
{
NativeType* NativePtr;
public:
ManagedType() : NativePtr(new NativeType()) {}
~ManagedType() { delete NativePtr; }
void ManagedMethod()
{ NativePtr->NativeMethod(); }
void ManagedMethod2()
{ NativePtr->Method2(); }
};
常に上記のリンクから C# で method2 を呼び出します。
mt.ManagedMethod2();