[C#] VS2005 (.NET 2.0) で PInvokeStackImbalance エラー

2007-7-1 22:11
このエントリーをはてなブックマークに追加

なぜか C# からシリアルポートを叩いたり DLLAPI を呼び出すプログラムを書いていますが、コンパイルエラーは出ないのに 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バイトなんですよね。

  • ブックマーク : アクセス: 16,323回
  • カテゴリー : C#
  • キーワード : , ,

コメントはまだありません

No comments yet.

Sorry, the comment form is closed at this time.

32 queries. HTML convert time: 0.090 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン