今日使用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的函数名
至此,问题解决。