P/Invoke 获取指向字符数组的指针

发布于 2024-08-11 08:32:23 字数 206 浏览 3 评论 0原文

我有一个 DLL,需要 P/Invoke 以下方法: 双字节 Foo( 整数a, 整数*b, 字符*c );

根据文档,参数“c”是一个输出参数,必须是大小为 16 的字符数组。其中会放置一个以 null 结尾的字符串。

参数“c”的 P/Invoke 定义是什么(其他的都很好)?调用后如何读取'c'的内容?

I have a DLL that I need to P/Invoke the following method:
DWORD Foo(
int a,
int *b,
char *c
);

Per the documentation, parameter 'c' is an out parameter that must be a char array of size 16. A null terminated string is placed into it.

What is the P/Invoke definition for parameter 'c' (I've got the others fine)? How is the content of 'c' read after the call?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

原谅我要高飞 2024-08-18 08:32:23

实际上,我更喜欢使用 StringBuilder 来完成这些事情。它比字符数组或不可变字符串更容易处理。只需确保使用足够的容量(本例中为 16)来初始化它,以便 DLL 填充。通常它会很好地编组,但您可能必须在 DLLImport 声明中设置字符集。

以下是有关此内容的更多信息:
来自 MSDN 杂志的托管和非托管代码之间的封送(Stringbuilder 部分)

I prefer to use StringBuilder for these things actually. It's far easier to deal with than char arrays or immutable strings. Just make sure you initialize it with enough capacity (16 in this case) for the DLL to fill. Typically it marshalls over just fine, but you may have to set the character set in your DLLImport declaration.

Here is a little more info on this:
Marshaling between Managed and Unmanaged Code from MSDN magazine (Stringbuilder section)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文