包装INLINE功能

时间:2013-01-18 11:52:48

标签: c# c++ c++-cli wrapper

  

可能重复:
  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 中定义的私有变量?我应该以某种方式包装它们吗?

由于

P.S。我上次4年前接触过C ++,从那时起用C#编写。

1 个答案:

答案 0 :(得分:2)

内联:标记内联方法是指令编译器不发出函数调用,而是取代方法的内容,并将其直接放入调用函数中。我相信这只是建议,编译器无论如何都可以选择发出函数调用。无论如何,从C ++ / CLI调用此函数时,您不需要做任何花哨的事情,因此在包装它时不需要做任何花哨的事情。只需将其包装与其他任何方法相同。

私有变量:如果它们是私有变量,那么使用PABCon的非托管C ++代码将无法访问它们。 PABCon的公共接口只是公共方法,因此您需要担心的一切。 (如果C ++类有任何 public 变量,那么你可以通过在C ++ / CLI中创建一个属性来包装它们。)

~PABConWrapper:在C ++ / CLI中,~不是析构函数,它是dispose方法。正如现在所实现的那样,如果您忘记处理新课程,则会发生内存泄漏。至少,将~切换为!,然后声明终结器。理想情况下,实现!~,删除两个方法中的非托管对象(使用正确的空检查),并在其他方法中添加适当的空值检查。这将是一个很好的&正确实施IDisposable。