vs2013 c# 中调用 c 编写的dll出错的可能错误

先说出错原因:    堆栈调用顺序 

解决办法:     使用   __stdcall 或 使用C#属性 CallingConvention

起因是我想在c#中调用c函数结果出错了

如下

C 头文件

 #define DLLExport extern "C" __declspec(dllexport)
 DLLExport int func(int a, int b);
 DLLExport void init();

 C#

 [DllImport("func.dll")] 
 public static extern int func(int a, int b);
 
 [DllImport("func.dll")] 
 public static extern void init();

 

调用时总是发生错误,只有init调用时不会出错,在搜索了很久之后我在C函数上加了一个 __stdcall 描述符,即堆栈调用顺序的改变,

PS:非托管dll使用的是stdcall,详见官方文档

就可以正常调用了

本文作者:endlesstravel

本文链接:https://www.cnblogs.com/night-ride-depart/p/4748266.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   endlesstravel  阅读(249)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起