2

可能重复:
C++/CLI 混合模式 DLL 创建

我正在使用 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中定义的私有变量?我也应该以某种方式包装它们吗?

谢谢

PS 我上次接触 C++ 是在 4 年前,从那时起我就用 C# 编写代码。

4

1 回答 1

2

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

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

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

于 2013-01-18T13:45:44.350 回答