DLL在跨平台之间的使用中遇到的问题(以delphi中开发的dll,在vc中使用为例)

         关于DLL如何使用比较简单,而且课本上以及网上相关内容也比较多,就不介绍了,只是说明我在使用过程中遇到的一个小错误,这是我第一次写帖子,可能写得不太好,请大家多多包涵。

      dll成功写完调用以后,运行程序,会提示错误,错误内容如下:

                     The value of ESP wasnot properly saved across a function call. This is usually a result of callinga function declared with one calling convention with a function                     pointer declaredwith a different calling convention.

                    (Press Retry to Debug the Application)

             

          原因:

            在delphi中写的DLL函数定义的调用规则是__stdcall(也只有使用这样的调用规则,该DLL中的函数才能被其他平台使用) , 此时在vc中进行定义并且调用该函数, 但是所有编译器默认的调用规则是__cdecl,而__stdcall 类型的函数却用了 __cdecl 的调用规则,由于编译时不会报错,结果出现了运行时异常。所以把在函数定义中进行设置调用规则即可解决此问题。


     解决办法:在定义函数类型时进行函数调用规则的更改
    如出错前的函数类型定义是: typedef void ( Foo)(int  a);    更改为: typedef void (__stdcall  Foo)(int  a); 

     也可以把__stdcall改为WINAPI  


    ---这样就可以解决上述的错误了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值