「PInvokeStackImbalance が検出されました」って何だ?

むかーしにVS2008Express C#と.NET2.0で作ったアプリの微修正を依頼されたわけです。

でもアメリカへの海外赴任を挟んでいたこともあって当時の開発環境は既に無く、開発環境の再構築からやり直しました。
まあせっかくなのでVS2010Expressと.NET4.0にアップデートしたのですけれども、そうしたらかつて出なかったエラーが出てビルドが通らないじゃないですか。


出たエラーはこちら。
pInvokeStackImbalance MDA | Microsoft Docs

DLLのマーシャライズを失敗しているっぽい。
前はビルドできたのに…。.NET3.5からの新機能なんですかね?
んで適当にググってみたらこのページがヒット。

呼び出し規約をcdeclと明記しなきゃいけなくなったっぽい?
このページのとおり

  • 元:[DllImport("foo.dll")]
  • 新:[DllImport("foodll", CallingConvention = CallingConvention.Cdecl)]

と変更したらビルドが通りました。
うーん。久々のC#は難しいな…。