【发布时间】:2013-10-02 15:25:15
【问题描述】:
我必须在 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 中找到了 this article,但与我想的不完全相同。
问候。
【问题讨论】:
-
我不太明白你想在这里做什么。您是否希望 ManagedWrapper 提供一个简单地委托给 NativeClass::VMethod 的虚拟 VMethod(String^ text)?
-
使用构造函数创建NativeClass的实例,在析构函数和终结器中再次销毁。
-
嗨@NathanMonteleone,是的,这正是我想做的。
-
@HansPassant 我不认为这是重复的,这里我不是在问如何创建包装器,而是如何将托管方法绑定到本机方法。