CLI でいくつかのネイティブ クラスをラップする必要があります。
しかし、ラッパーでそれらの仮想メソッドをオーバーライドする方法については疑問があります。したがって、仮想メソッドを持つネイティブ クラスがあるとします。
class NativeClass {
virtual void VMethod(std:string text) {
...
}
};
そして、あなたはそれを管理されたクラスでラップしたい...私は次のようなことをすることを考えました:
#pragma unmanaged
class NativeWrapper : public NativeClass {
public:
typedef void (*VMethodFunc)(std::string);
NativeWrapper(VMethodFunc VMethodFuncPtr)
: m_VMethodFuncPtr(VMethodFuncPtr) {}
void VMethod(std::string text) {
m_VMethodFuncPtr(text);
};
private:
VMethodFunc m_VMethodFuncPtr;
};
#pragma managed
ref class ManagedWrapper {
public:
// To Override
virtual void VMethod(String^ text) {
Console.WriteLine(text);
};
private:
void VMethod(std::string text) {
String^ sErr = gcnew String(text.c_str());
VMethod(sErr);
};
};
しかし、ManagedWrapper::VMethod(std::string) を VMethodFunc 関数ポインターに「バインド」するにはどうすればよいですか? MSDN でこの記事を見つけましたが、私が推測するものとまったく同じではありません。
よろしく。