C# 调用 C++ dll 的一些问题

今日使用C# 来调用自己用C++ 写得dll,在调试的过程中遇到了一些问题,现记录下来,以备查看。


C++ dll 部分的声明如下:

#define DllDemoAPI  __declspec(dllexport)

#ifdef __cplusplus
extern "C" {
#endif

DllDemoAPI  int  _stdcall  add(int a,int b);

#ifdef __cplusplus
}
#endif

一开始在Debug下,一切还挺顺利的,但是切换到release下就有了好多问题。

1.无法找到“*.dll".——解决方法:DllImport(@"D:\*\*.dll"),包含全路径就可以了。

2.无法找到程序入口点。经dumpbin 查看导出函数发现名称不一致。

debug时的函数名:

release时的函数名:

将函数入口点名称改成“_add@8”后出现错误提示“PInvokestackImbalance”。

3.“PInvokestackImbalance”的错误——解决方法:CallingConvention = CallingConvention.Cdecl。同时将C++中的_stdcall去掉,此时生成的dll的函数名

至此,问题解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值