PInvoke 関数~~がスタックを不安定にしています(DLLの呼び出し規約変わったよ!)で、少し悩んだ話 – Information Teaching Service 雄飛

PInvoke 関数~~がスタックを不安定にしています(DLLの呼び出し規約変わったよ!)で、少し悩んだ話

こんにちは、ITservice雄飛です。

今日は、C#とパソリの話題を。
今、フリーのライブラリ「Felicalib」と、パソリで勤怠管理アプリのマイグレード(更新)を行っています。
マイグレードって言っても、個人での小さな更新ですが。
元は、C#のコンソールアプリとDelphiのガワから出来た、
ハイブリットなアプリだったんですが。
Delphi使えなくなって、大幅見直しです。
ついでに、使い易いように、中身も幾分変えようかと。
そこで、更新の最中に問題に遭遇したので、その対処策を。
こんなエラーが出ました。
「マネージド デバッグ アシスタント ‘PInvokeStackImbalance’ : ‘PInvoke 関数 ‘****!****.****::****’ がスタックを不安定にしています。PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。呼び出し規約、および PInvoke シグネチャのパラメーターがターゲットのアンマネージ シグネチャに一致していることを確認してください。’
色々ググって調べまくりましたが。
どうやら、DLLの呼び出し規約が、.net4.0から変わってたみたい。
具体的には、
[DllImport(“DLL名”)]
を、
[DllImport(“DLL名”, CallingConvention = CallingConvention.Cdecl)]
に、変えてあげます。
因みに、該当する箇所全部。
C++で作られたDLLなら、
[DllImport(@”DLL名”)]
を、
[DllImport(@”DLL名”, CallingConvention = CallingConvention.Cdecl)]
とします。
これで、問題なく動きました。
めでたしめでたし。

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です