C#调用C++DLL字段类型的问题

BitCoffee 2017-12-12 09:36:52
int __stdcall GetVersion(HANDLE ComHandle, BYTE MacAddr, BYTE Version[20], char *RecordInfo);
这个是C++头文件里面的。
ComHandle,MacAddr,RecordInfo这三个参数都能确定没有问题。
就是BYTE Version[20]这个输出参数不知道对应的是什么。
byte[],StringBulid,string,[MarshalAs(UnmanagedType.LPArray, SizeConst = 20)]byte[],等等都试过了。
没有这个指定的长度还好,指定长度了不知道用什么对应。
...全文
213 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BitCoffee 2017-12-12
  • 打赏
  • 举报
回复
试过了,不行。 第一次遇到这种BYTE Version[20]指定了长度,作为输出参数的,而且不是在结构体里面的。
白衣如花 2017-12-12
  • 打赏
  • 举报
回复
函数定义指定的数组长度确实是无意义的
白衣如花 2017-12-12
  • 打赏
  • 举报
回复
把他当普通的BYTE*,初始化空间稍微大一点,比如32,再试试?
gh1223181184 2017-12-12
  • 打赏
  • 举报
回复
Marshal.AllocHGlobal Marshal.Copy Marshal.FreeHGlobal
gh1223181184 2017-12-12
  • 打赏
  • 举报
回复
用IntPtr 在非托管堆上alloc buffer 20个字节,把你的数据拷贝进去
BitCoffee 2017-12-12
  • 打赏
  • 举报
回复
试过了,不行,而且byte[]在C++里面好像就是指针,不需要out。 如果BYTE Version[]参数里面没有指定长度直接用byte[]就可以了,指定长度了,就不知道用什么类型。
Saleayas 2017-12-12
  • 打赏
  • 举报
回复
创建一个 byte[] Version = new byte[20]; 然后签名方法为 out byte[] 就可以了。 你试试看。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧