[解決済み] pinvokestackimbalance -- どうすればこれを修正できますか、またはどうすればこれをオフにできますか?
質問
vs2008 から vs2010 に切り替えたところです。 C++ dll へのすべての呼び出しが「pinvokestackimbalance」例外を発生させる以外は、まったく同じ解決策です。
この例外は 2008 では発生しません。 私は、C++ dll と呼び出し側のアプリケーションに完全にアクセスできます。 pinvoke には何の問題もないように見えますが、この問題により、他の問題のデバッグが不可能になっています。
たとえば、ここに C# の署名があります。
[DllImport("ImageOperations.dll")]
static extern void FasterFunction(
[MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, //IntPtr inImage,
[MarshalAs(UnmanagedType.LPArray)]byte[] outImage, //IntPtr outImage,
int inTotalSize, int inWindow, int inLevel);
C++側ではこんな感じです。
#ifdef OPERATIONS_EXPORTS
#define OPERATIONS_API __declspec(dllexport)
#else
#define OPERATIONS_API __declspec(dllimport)
#endif
extern "C" {
OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray,
unsigned char* outRemappedImage,
int inTotalSize,
int inWindow, int inLevel);
}
vs2010 と vs2008 では何が違っていて、これらの例外がスローされるのでしょうか? DllImport ディレクティブに異なるパラメータ セットを追加する必要がありますか?
どのように解決するのですか。
まず、コードが間違っている (そして常にそうであった) ことを理解します。pInvokeStackImbalance" は、それ自体は例外ではありませんが、管理されたデバッグ アシスタントです。VS2008ではデフォルトでオフになっていましたが、多くの人がオンにしなかったので、VS2010ではデフォルトでオンになっています。MDA はリリース モードでは実行されないので、リリース用にビルドしてもトリガーされません。
あなたの場合、呼び出しの規則が正しくありません。
DllImport
はデフォルトで
CallingConvention.WinApi
と同じです。
CallingConvention.StdCall
と同じです。これは
CallingConvention.Cdecl
.
これは、行を編集することで、行うことができます
[DllImport("ImageOperations.dll")]
にすることです。
[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]
詳しくは このMSDNリファレンス
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】C#で四捨五入する方法
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] .NETでC#オブジェクトをJSON文字列に変換するには?
-
[解決済み】Visual Studio IDEで空白文字の表示をオフにする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み】Nullableオブジェクトは値を持たなければならない?