我正在使用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 中定义的私有变量?我应该以某种方式包装它们吗?
由于
P.S。我上次4年前接触过C ++,从那时起用C#编写。
答案 0 :(得分:2)
内联:标记内联方法是指令编译器不发出函数调用,而是取代方法的内容,并将其直接放入调用函数中。我相信这只是建议,编译器无论如何都可以选择发出函数调用。无论如何,从C ++ / CLI调用此函数时,您不需要做任何花哨的事情,因此在包装它时不需要做任何花哨的事情。只需将其包装与其他任何方法相同。
私有变量:如果它们是私有变量,那么使用PABCon
的非托管C ++代码将无法访问它们。 PABCon
的公共接口只是公共方法,因此您需要担心的一切。 (如果C ++类有任何 public 变量,那么你可以通过在C ++ / CLI中创建一个属性来包装它们。)
~PABConWrapper
:在C ++ / CLI中,~
不是析构函数,它是dispose方法。正如现在所实现的那样,如果您忘记处理新课程,则会发生内存泄漏。至少,将~
切换为!
,然后声明终结器。理想情况下,实现!
和~
,删除两个方法中的非托管对象(使用正确的空检查),并在其他方法中添加适当的空值检查。这将是一个很好的&正确实施IDisposable。