分两种情况:
静态调用时,需要在函数声明语句中加入CallingConvention = CallingConvention.Cdecl
如下所示:
[DllImport("TestDLL.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int Add(int a, int b);
动态调用DLL时,需要修改生成DLL的源码。 在函数前面加上 __stdcall。
如下所示:
int _stdcall Add(int a,int b)
{
cout << "TestDll"<<endl;
return a + b;
}
这样就解决了PinvokeStackImbalance问题