2

我正在查看适用于 .NET 的 SoundTouchWrapper,我看到了这个:

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

在原始 C++ 库的头文件中:

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

我在哪里可以了解它的工作原理?传递给该函数的 StringBuilder 是如何填充数据的?

4

1 回答 1

2

被调用的库需要一个指向大小为 的字符数组的指针,bufferSize以将文本写入其中。

soundtouch_getVersionString2(char* versionString, int bufferSize);

因此,您需要一个可以传递给 C++ 库的具有预定义大小的可变对象。这里StringBuilder到位了。简单来说:由于 StringBuilder 的内存使用和 char-array 类似,调用者可以将其视为 char-array 并以常用方式填充。

然后以这种方式使用该功能:

int bufferSize = 50;
StringBuilder versionString = new StringBuilder(" ", bufferSize);
soundtouch_getVersionString2(versionString, bufferSize);
string realString = versionString.ToString(); //convert it to unmutable stringstring
于 2016-04-20T18:34:14.737 回答