gpt4 book ai didi

c# - DllImport 中的编码(marshal)处理、StringBuilder 和字符指针

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:47 25 4
gpt4 key购买 nike

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

最佳答案

被调用的库需要一个指向大小为 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

关于c# - DllImport 中的编码(marshal)处理、StringBuilder 和字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17438364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com