作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在未处理的 COM 对象中有一个方法,我正在尝试编码:
STDMETHOD(SomeMethod)(LPSTR** items, INT* numOfItems) = 0;
但我想不出编码 LPSTR** 项的正确方法。它应该是一个项目列表。但是,如果尝试做这样的事情:
[PreserveSig]
int SomeMethod([MarshalAs(UnmanagedType.LPStr)]ref StringBuilder items, ref uint numOfItems);
我只得到第一个项目的第一个字母,没有别的。
如何正确编码 LPSTR** 变量?
最佳答案
我现在无法检查它,但签名应该是这样的:
[PreserveSig]
int SomeMethod(
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr, SizeParamIndex = 1)] out string[] items,
out int numOfItems);
当然,这没有帮助,您始终可以通过 Marshal 执行手动编码类(如 Sinatr 建议的那样)。
关于c# - 如何在 .NET 中编码 LPSTR**?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43072247/
我是一名优秀的程序员,十分优秀!