gpt4 book ai didi

c# - 在 C# 中将 char * 编码到 StringBuilder

转载 作者:行者123 更新时间:2023-11-30 15:39:55 25 4
gpt4 key购买 nike

我知道这已经被讨论过,但 3 天后我还没有弄清楚为什么在 C# 中调用封装在 DLL 中的 C 函数后我总是得到一个空白字符串:

[DllImport(DllName, CharSet = CharSet.Ansi)]
public static extern int QA_FormatExample(int viHandle, int viExample [MarshalAs(UnmanagedType.LPStr)]StringBuilder rsComment)

在主要部分:

StringBuilder rsComment = new StringBuilder(256);
apiWrap.QA_FormatExample(currentInstance, viExample, rsComment);
System.Diagnostics.Debug.WriteLine(rsComment);

函数的签名:

int __stdcall QA_FormatExample(int, int, char*);

函数QA_FormatExample一旦调用就会初始化rsComment,但我一直得到rsComment空白。如有任何建议,我们将不胜感激,谢谢。

最佳答案

为了匹配 C++,函数应该这样声明:

[DllImport(DllName)]
public static extern int QA_FormatExample(
int viHandle,
int viExample,
StringBuilder rsComment
);

你这样调用它:

StringBuilder comment = new StringBuilder(256);
int res = QA_FormatExample(handle, example, comment);

这与您在问题中提出的内容非常接近。因此,如果您对该函数的调用不起作用,那么您的问题就出在我们看不到的代码中。我上面展示的是通过 char* 将文本从 native 编码为托管文本的正确方法。

我想指出的是,您没有将缓冲区的长度传递给函数是有点不寻常的。如果没有该信息,则必须对最大长度进行硬编码。

关于c# - 在 C# 中将 char * 编码到 StringBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235657/

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