Reputation: 1
How could I return pointers to C# from C++ using SWIG? For example, I have following:
class MyClass
{
public:
void* buffer(); // return pointer to internal buffer
int *somethingElse();
};
How could I write swig interface file to successfully use this class from c#?
Upvotes: 0
Views: 1241
Reputation: 276
You could use
%apply void *VOID_INT_PTR { void * }
to generate void* as System.IntPtr in C#. But i am now really sure if it's that what you want.
Upvotes: 0
Reputation: 8851
Use C++/CLI to wrap your C++ class. In your C++/CLI class return appropriately typed objects.
For example:
//[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;
}
};
Upvotes: 1