P/Invoke 获取指向字符数组的指针
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
实际上,我更喜欢使用 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)