[C#] VS2005 (.NET 2.0) で PInvokeStackImbalance エラー
2007-7-1 22:11
なぜか C# からシリアルポートを叩いたり DLL の API を呼び出すプログラムを書いていますが、コンパイルエラーは出ないのに PInvokeStackImbalance が出ます。
PInvokeStackImbalance が検出されました。 Message: PInvoke 関数 'hoge!xxx.yyy::zzz' がスタックを不安定にしています。PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。呼び出し規約、および PInvoke シグネチャのパラメータがターゲットのアンマネージ シグネチャに一致していることを確認してください。
どれだけヘルプを読んでもよくわからない用語だらけですが、こういうときは大抵 DllImport で書いた DLL の呼び出し部分の記述が間違っています。とくに形の違いというということが多いと思います。よくやるのが C で long を渡すところに C# でも long を指定しまうこと。C# では long は符号付き 64 ビット整数(8バイト)なので、C の long int (4バイト)とは異なります。この場合 C# の int (4バイト)を渡します。C では int は 2バイトなんですよね。
コメントはまだありません
No comments yet.
Sorry, the comment form is closed at this time.