user732450
user732450

Reputation: 1

Returning pointers from C++ to C# using SWIG

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

Answers (2)

G. Martinek
G. Martinek

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

Indy9000
Indy9000

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

Related Questions