C# 包装内联函数
可能重复:C# 包装内联函数,c#,c++,c++-cli,wrapper,C#,C++,C++ Cli,Wrapper,可能重复: 我用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
我用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();
};
public ref class PABConWrapper
{
private:
PABCon *pabc;
public:
PABConWrapper();
~PABConWrapper();
void invertData();
};
我以这种方式包装非内联函数:
pabconwrapper.h
class PABCon {
private:
unsigned int maxIndex;
long byteSize;
public:
__declspec(dllexport) inline unsigned int GetMaxIndex() { return this->maxIndex; };
__declspec(dllexport) void invertData();
};
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++函数的最佳方法是什么?< /P> 2) 如何处理pabcon.h中定义的私有变量?我也该把它们包起来吗
谢谢P.S.S.我上次接触C++是在4年前,从那时起就用C语言编码了。 inline:内联标记方法是一种指令,用于编译器不发出函数调用,而是获取方法的内容,并将其直接放入调用函数中。我相信这只是建议,编译器可以选择发出函数调用。无论如何,从C++/CLI调用此函数时不需要做任何花哨的事情,因此在包装它时也不需要做任何花哨的事情。只需像其他方法一样包装它
私有变量:如果它们是私有变量,那么使用<代码> PABCon < /代码>的非托管C++代码将无法访问它们。
PABCon
的公共接口只是公共方法,所以这就是您需要担心的全部。(如果C++类有任何公共变量,那么您可以通过在C++中创建属性来封装它们。)
~PABConWrapper
:在C++/CLI中,~
不是析构函数,而是dispose方法。正如现在实现的那样,如果忘记处理新类,您将有内存泄漏。至少,将~
切换到代码>,并声明终结器。理想情况下,实现这两个
和~
,删除这两个方法中的非托管对象(使用适当的空检查),并在其他方法中添加适当的空检查。这将是IDisposable的一个良好且正确的实现。您的意思是从C#与它们交互操作吗?您将创建另一个函数来访问私有变量,除非您计划对数据的字节进行嗅探class@Jay没错,我需要c语言中的内联函数,如果您只需要调用,请使用PInvoke。请参阅@杰伊,我不能使用PInvoke作为C++函数不是静态的。那么,做一个静态的函数:)你还试图“内联”,因为你不能内联已经内联的东西…特别感谢指向我的析构函数/终结器。