如何使用 SWIG 从 C++ 返回指向 C# 的指针?例如,我有以下内容:
class MyClass
{
public:
void* buffer(); // return pointer to internal buffer
int *somethingElse();
};
我如何编写 swig 接口文件以从 c# 成功使用此类?
使用 C++/CLI 包装您的 C++ 类。在您的 C++/CLI 类中返回适当类型的对象。
例如:
//[untested! not production quality. Just to illustrate a point]
ref class MyClassWrapper
{
MyClass * m_pMyClass;
public:
MyClassWrapper():m_pMyClass(NULL)
{
m_pMyClass = new MyClass();
}
~MyClassWrapper()
{
this->!MyClassWrapper();
}
array<byte>^ AccessBuffer()
{
m_pMyClass->buffer();
array<byte>^ buf = gcnew array<byte>(buffer_length);
...
//Copy elements to buf
...
return buf;
}
!MyClassWrapper()
{
delete m_pMyClass;
m_pMyClass = NULL;
}
};
你可以使用
%apply void *VOID_INT_PTR { void * }
在 C# 中生成 void* 作为 System.IntPtr。但我现在真的很确定这是否是你想要的。