2012-05-17 90 views
0

如何使用SWIG從C++返回指向C#的指針? 例如,我有以下幾點:使用SWIG從C++返回指向C#的指針

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

我怎麼能寫痛飲接口文件成功地使用這個類從C#?

+0

什麼是C++庫?它是.NET嗎? –

回答

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; 
    } 
}; 
+0

謝謝Indeera!雖然這是正確的,但我需要使用Swig將C++代碼(一個巨大的API)的功能公開給C#。我避免手動編寫包裝,因此決定使用SWIG。目前我堅持在函數和方法返回指向靜態變量和成員的指針。我無法找到如何編寫swig .i文件來表示這些函數和方法。 – user732450

0

你可以在C#中使用

%apply void *VOID_INT_PTR { void * } 

產生無效*爲System.IntPtr。但我現在真的很確定,如果這是你想要的。