如何在托管 class 中使用非托管 class?
How can I use unmanaged class in managed class?
我正在尝试将 cv::CascadeClassifier
对象放入 System.Windows.Forms.Form
class。
Intellisense 和编译器说,我不能在托管 class 中有非托管 class。
那么,如何在我的 Windows Forms 应用程序中使用非托管 class?
嗯,你的编译器是正确的。但是,您可以将指向非托管类型的 指针 作为成员。这不是最佳的,但这就是你所拥有的。如果需要,您可以使用构造函数和析构函数进行分配和清理。
here 是来自 MSDN 的一些示例代码。同意 Ed S. 的回答
The this pointer in U is a __nogc pointer , so f cannot be called without first pinning M.
示例(来自同一页面)
// mcpp_nested_classes5.cpp
// compile with: /clr /LD
#using <mscorlib.dll>
__gc struct M {
__nogc struct U { // nested unmanaged class
int m_data;
U() { System::Console::WriteLine("U::U"); }
void f() { int* p = &m_data; }
};
int ia __nogc[100]; // embedded unmanaged array
};
M::U u; // use unmanaged nested type
我正在尝试将 cv::CascadeClassifier
对象放入 System.Windows.Forms.Form
class。
Intellisense 和编译器说,我不能在托管 class 中有非托管 class。
那么,如何在我的 Windows Forms 应用程序中使用非托管 class?
嗯,你的编译器是正确的。但是,您可以将指向非托管类型的 指针 作为成员。这不是最佳的,但这就是你所拥有的。如果需要,您可以使用构造函数和析构函数进行分配和清理。
here 是来自 MSDN 的一些示例代码。同意 Ed S. 的回答
The this pointer in U is a __nogc pointer , so f cannot be called without first pinning M.
示例(来自同一页面)
// mcpp_nested_classes5.cpp
// compile with: /clr /LD
#using <mscorlib.dll>
__gc struct M {
__nogc struct U { // nested unmanaged class
int m_data;
U() { System::Console::WriteLine("U::U"); }
void f() { int* p = &m_data; }
};
int ia __nogc[100]; // embedded unmanaged array
};
M::U u; // use unmanaged nested type