C# 调用C写的dll ,传递结构一直报 尝试读取或写入受保护的内存

weixin_40304230 2018-03-08 11:50:09
C# 调用C写的dll ,传递结构一直报 尝试读取或写入受保护的内存,
知道是结构对应的问题,可是这个对应好难搞啊, 没学过C。
有没有什么调试的方法,或者变通的方法?
看到说可以把结构转成byte[] 来传递, 大神告诉我是什么机制, 要怎么搞~~~
求帮助
...全文
288 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40304230 2018-03-10
  • 打赏
  • 举报
回复
问题解决了,问题源于对C的不了解~~~ 谢谢各位
lyzhou2 2018-03-09
  • 打赏
  • 举报
回复
我之前也出现过,不过我是因为没有给指针分配空间导致的
xian_wwq 2018-03-09
  • 打赏
  • 举报
回复
P/Invoke调用麻烦是因为对于c不熟悉 c#与c结构体对应有很多细节需要注意, 比如布局类型(LayoutKind), 字符集(CharSet),字节对齐方式(Pack)等 举个例子

        [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct Info
        {
            public int OrderNO;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
            public byte[] UniqueCode;
            public float CpuPercent;

        };
大多数c dll使用 ansi,而c#默认使用的是Unicode 这些都会导致对应失败

110,533

社区成员

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

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

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