プロジェクトを .NET 3.5SP1 から .NET 4.5 にアップグレードしたところ、comctl32 から DllGetVersion への呼び出しで PInvokeStackImbalance MDA を取得しています。フレームワークがデフォルトで誤った呼び出し規則に対して回復力がなくなっていることを読み、理解しました。奇妙なのは、私が正しいと信じている CallingConvention.Cdecl を既に指定していることです。CallingConvention 属性を完全に削除してデフォルト (CallingConvention.WinAPI) にすると、PInvokeStackImbalance が取得されません。誰でもこれに光を当てることができますか?OSはWin 7 64ビットで、違いがあれば32ビットアプリです。DllGetVersion 関数のヘッダー ファイルを調べてみましたが、呼び出し規約がどうあるべきかわかりません。
[DllImport("Comctl32.dll", EntryPoint = "DllGetVersion", CallingConvention = CallingConvention.Cdecl)]
private static extern int NativeDllGetVersion(ref DLLVERSIONINFO pdvi);