Possible Duplicate:
C++/CLI Mixed Mode DLL Creation
我正在使用 c++ cli 包装 C++ 类。头文件如下所示:
pabcon.h
class PABCon {
private:
unsigned int maxIndex;
long byteSize;
public:
__declspec(dllexport) inline unsigned int GetMaxIndex() { return this->maxIndex; };
__declspec(dllexport) void invertData();
};
我用这种方式包装非内联函数:
pabconwrapper.h
public ref class PABConWrapper
{
private:
PABCon *pabc;
public:
PABConWrapper();
~PABConWrapper();
void invertData();
};
pabconwrapper.cpp
PABConWrapper::PABConWrapper() : pabc(new PABCon())
{
}
void PABConWrapper::invertData()
{
pabc->invertData();
}
PABConWrapper::~PABConWrapper()
{
delete pabc;
}
我的问题是:
1) 包装内联 C++ 函数的最佳方式是什么?
2) 我应该如何处理 pabcon.h 中定义的私有(private)变量?我也应该以某种方式包裹它们吗?
谢谢
附注我上次接触 C++ 是在 4 年前,从那时起我就用 C# 编写代码。
最佳答案
内联:将方法标记为内联是向编译器发出的指令,指示编译器不要发出函数调用,而是获取方法的内容,并将其直接放入调用函数中。我相信这只是建议性的,编译器无论如何都可以选择发出函数调用。无论如何,从 C++/CLI 调用此函数时不需要做任何花哨的事情,因此在包装它时也不需要做任何花哨的事情。只需像其他方法一样包装它即可。
私有(private)变量:如果它们是私有(private)变量,那么使用PABCon
的非托管C++代码将无法访问它们。 PABCon
的公共(public)接口(interface)只是公共(public)方法,所以这就是您需要担心的。 (如果 C++ 类有任何公共(public)变量,那么您可以通过在 C++/CLI 中创建属性来包装它们。)
~PABConWrapper
:在 C++/CLI 中,~
不是析构函数,而是 dispose 方法。按照现在的实现方式,如果您忘记释放新类,就会出现内存泄漏。至少,将 ~
切换为 !
,并声明终结器。理想情况下,同时实现 !
和 ~
,删除两个方法中的非托管对象(使用适当的 null 检查),并在其他方法中添加适当的 null 检查。这将是 IDisposable 的良好且正确的实现。
关于c# - 包装 INLINE 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398384/