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

来源:互联网 发布:网络诈骗形式 编辑:程序博客网 时间:2024/05/16 01:07

今日使用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