2013-07-03 26 views
2

我一直在尋找SoundTouchhWrapper的.NET,我看到了這一點:整編,StringBuilder的,並且在的DllImport字符指針

[DllImport (SoundTouchDLLName)] 
internal static extern void soundtouch_getVersionString2 (StringBuilder versionString, int bufferSize);  

而且從原單C中的頭文件++庫:

__declspec(dllimport) void __stdcall soundtouch_getVersionString2(char* versionString, int bufferSize); 

我在哪裏可以閱讀它的工作原理? StringBuilder如何傳遞給這個函數充滿了數據?

+1

使用StringBuilder的固定-lenght串這裏描述:http://msdn.microsoft.com/en-us/library/s9ts558h.aspx在固定-Lenght字符串緩衝區部分。 – fcuesta

+0

我現在明白了。添加你的答案。 – zgnilec

回答

0

被調用的庫管理程序需要一個指向大小爲bufferSize的字符數組的指針來寫入文本。

soundtouch_getVersionString2(char* versionString, int bufferSize); 

因此,您需要一個具有預定義大小的可變對象,您可以將它傳遞給C++庫。這裏StringBuilder到位。簡單一點:由於StringBuilder的內存使用和char-array相似,因此調用者可以將其視爲char數組並將其填充爲常見方式。

然後使用該函數是這樣的:

int bufferSize = 50; 
StringBuilder versionString = new StringBuilder(" ", bufferSize); 
soundtouch_getVersionString2(versionString, bufferSize); 
string realString = versionString.ToString(); //convert it to unmutable stringstring