分两种情况: 静态调用时,需要在函数声明语句中加入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问题