我们刚刚将我们的项目从 .NET 3.5SP1 升级到 .NET 4.5,现在我们在从 comctl32 调用 DllGetVersion 时获得了 PInvokeStackImbalance MDA。我已经阅读并了解到框架在默认情况下不再能够适应不正确的调用约定。奇怪的是,我们已经指定了 CallingConvention.Cdecl,我认为这是正确的。如果我完全删除 CallingConvention 属性并让它成为默认值 (CallingConvention.WinAPI),我们不会得到 PInvokeStackImbalance。任何人都可以对此有所了解吗?操作系统是 Win 7 64 位,如果有任何区别,它是一个 32 位应用程序。我试过查看 DllGetVersion 函数的头文件,但我不知道调用约定应该是什么。
[DllImport("Comctl32.dll", EntryPoint = "DllGetVersion", CallingConvention = CallingConvention.Cdecl)]
private static extern int NativeDllGetVersion(ref DLLVERSIONINFO pdvi);