DllImport中的Marshaling,StringBuilder和char指针

时间:2013-07-03 01:29:50

标签: c# marshalling dllimport stringbuilder

我正在看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传递给这个函数的方式是用数据填充的吗?

1 个答案:

答案 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