0

SWIGを使用してC++からC#へのポインターを返すにはどうすればよいですか?たとえば、私は次のようにしています:

class MyClass
{
    public:
        void* buffer(); // return pointer to internal buffer
        int *somethingElse();
};

C#からこのクラスを正常に使用するためにswigインターフェイスファイルを作成するにはどうすればよいですか?

4

2 に答える 2

1

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;
    }
};
于 2012-05-17T08:31:11.903 に答える
0

あなたが使用することができます

%apply void *VOID_INT_PTR { void * }

C# で System.IntPtr として void* を生成します。しかし、それがあなたが望むものであるかどうか、私は今本当に確信しています。

于 2012-05-18T07:20:57.337 に答える