C# DllImport中的封送处理、StringBuilder和字符指针

C# DllImport中的封送处理、StringBuilder和字符指针,c#,marshalling,dllimport,stringbuilder,C#,Marshalling,Dllimport,Stringbuilder,我正在查看.NET的SoundTouchWrapper,我看到了以下内容: [DllImport (SoundTouchDLLName)] internal static extern void soundtouch_getVersionString2 (StringBuilder versionString, int bufferSize); 和从原始C++库的头文件: __declspec(dllimport) void __stdcall soundtouch_getVersio

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

被调用的libraray需要一个指向大小为
bufferSize
的字符数组的指针来写入文本

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

使用StringBuilder处理固定长度字符串如下所述:在固定长度字符串缓冲区部分。我现在明白了。加上你的答案。