如何使用SWIG從C++返回指向C#的指針? 例如,我有以下幾點:使用SWIG從C++返回指向C#的指針
class MyClass
{
public:
void* buffer(); // return pointer to internal buffer
int *somethingElse();
};
我怎麼能寫痛飲接口文件成功地使用這個類從C#?
如何使用SWIG從C++返回指向C#的指針? 例如,我有以下幾點:使用SWIG從C++返回指向C#的指針
class MyClass
{
public:
void* buffer(); // return pointer to internal buffer
int *somethingElse();
};
我怎麼能寫痛飲接口文件成功地使用這個類從C#?
使用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;
}
};
謝謝Indeera!雖然這是正確的,但我需要使用Swig將C++代碼(一個巨大的API)的功能公開給C#。我避免手動編寫包裝,因此決定使用SWIG。目前我堅持在函數和方法返回指向靜態變量和成員的指針。我無法找到如何編寫swig .i文件來表示這些函數和方法。 – user732450
你可以在C#中使用
%apply void *VOID_INT_PTR { void * }
產生無效*爲System.IntPtr。但我現在真的很確定,如果這是你想要的。
什麼是C++庫?它是.NET嗎? –