C# 跨平台调用C++ dll 异常

花开花折 2018-01-16 06:46:34
[DllImport("xx.dll", EntryPoint=“xxFunction”,CharSet=CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]


1:当CallingConvention = CallingConvention.Cdecl 调用正常,当为CallingConvention = CallingConvention.StdCall报“请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配”

2:测试了下,相同的C++ dll,不管CallingConvention 设置为CallingConvention.Cdecl 或StdCall都在别人的项目下都可以用,但在自己项目下CallingConvention 只能设置为Cdecl ,因此初步怀疑是VS解决方案或项目设置问题。


3:谢谢。
...全文
255 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fontain2 2018-01-17
  • 打赏
  • 举报
回复
应该是不可以的,在别人的项目下可能有两个编译版本或者是无参函数,涉及到参数的压栈顺序。参考https://www.cnblogs.com/jueyunqi/p/4140141.html
花开花折 2018-01-17
  • 打赏
  • 举报
回复
是VS的设置问题,屏蔽掉相关异常就可以了,至于为何报异常估计是C++ dll封装的问题。
花开花折 2018-01-17
  • 打赏
  • 举报
回复
引用 1 楼 fontain2 的回复:
应该是不可以的,在别人的项目下可能有两个编译版本或者是无参函数,涉及到参数的压栈顺序。参考https://www.cnblogs.com/jueyunqi/p/4140141.html
1:底层函数dll是一样的,[DllImport("xx.dll", EntryPoint=“xxFunction”,CharSet=CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]也是一样的,参数类型及数量也是一样的啊。
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

110,535

社区成员

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

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

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