4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

既存DLL配布モジュールで発生する PInvokeStackImbalance の回避

Last updated at Posted at 2012-10-13

開発が止まってるものとか、ソースコードが配布されていない物、とりあえず使ってみたいだけって物で実行時に PInvokeStackImbalance が出たときの回避方法。
そもそも PInvokeStackImbalance を出さないようにするには、MSDNで検索で。

まず,どうも vshost を有効にしていると 1 回目のデバッグ実行のみしか効果が無さそうなので,とりあえず今のところ vshost は諦める他無さそう.というわけでプロジェクト設定の「デバッグ」の項目から vshost を有効にするのチェックは外しておく.ここから先は 3 通り.

方法1 レジストリキーを使う方法
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework" に "MDA" という値を作って "0" を設定すると MDA が完全に無効化される.

方法2 環境変数を使う方法
"COMPLUS_MDA" という環境変数に "0" を設定すると MDA が完全に無効化される.

方法3 コンフィグファイルを使う方法
"COMPLUS_MDA" という環境変数に "1" を設定するとデバッガはコンフィグファイルを参照するようになる.次に実行ファイルと同じフォルダに "(アプリケーション名.exe).mda.config" というファイルを作成し,次の内容をセット.FDBK38347 の Microsoft からの書き込みにある通り,MDA を完全に殺してしまう必要はなくて,pInvokeStackImbalance のみを無効化すれば今回の件については十分な模様.

<?xml version="1.0" encoding="utf-8" ?>
<mdaConfig>
  <assistants>
    <pInvokeStackImbalance enable="false" >
  </assistants>
</mdaConfig>
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?