ITservice雄飛 プロモーションビデオ

2020年4月30日木曜日

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)]

とします。


これで、問題なく動きました。



めでたしめでたし。

0 件のコメント:

コメントを投稿