请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配

时间:2021-12-21 18:04:21

转载自:http://blog.csdn.net/xfz0330/article/details/51477769

在c#中引入c++生成的dll,出现了如下问题:

对 PInvoke 函数“GAProject!GAProject.Form1::Add”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

解决方案:
[DllImport("Dll.dll")] 改为[DllImport("Dll.dll", CallingConvention=CallingConvention.Cdecl)]
DllImport的CallingConvention的属性,默认值是CallingCovention.Stdcall,  此处更改成Cdecl(c/c++默认调用方式)就可以了。