我正在看SoundTouchhWrapper for .NET,我看到了:
[DllImport (SoundTouchDLLName)]
internal static extern void soundtouch_getVersionString2 (StringBuilder versionString, int bufferSize);
在原始C ++库的头文件中:
__declspec(dllimport) void __stdcall soundtouch_getVersionString2(char* versionString, int bufferSize);
我在哪里可以阅读它的工作原理? StringBuilder传递给这个函数的方式是用数据填充的吗?
答案 0 :(得分:0)
调用的libraray需要一个指向大小为bufferSize
的char数组的指针来写入文本。
soundtouch_getVersionString2(char* versionString, int bufferSize);
因此,您需要一个具有预定义大小的可变对象,您可以将其传递给C ++库。这里StringBuilder
到位了。简单来说:由于StringBuilder的内存和char数组的使用类似,调用者可以将其视为char数组并以常用方式填充它。
然后以这种方式使用该功能:
int bufferSize = 50;
StringBuilder versionString = new StringBuilder(" ", bufferSize);
soundtouch_getVersionString2(versionString, bufferSize);
string realString = versionString.ToString(); //convert it to unmutable stringstring