SWIGを使用してC++からC#へのポインターを返すにはどうすればよいですか?たとえば、私は次のようにしています:
class MyClass
{
public:
void* buffer(); // return pointer to internal buffer
int *somethingElse();
};
C#からこのクラスを正常に使用するためにswigインターフェイスファイルを作成するにはどうすればよいですか?
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# で System.IntPtr として void* を生成します。しかし、それがあなたが望むものであるかどうか、私は今本当に確信しています。