DllImport中的封送、StringBuilder和字符指针

本文关键字:StringBuilder 字符 指针 DllImport | 更新日期: 2023-09-27 18:20:51

我在看.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是如何填充数据的?

DllImport中的封送、StringBuilder和字符指针

被调用的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