0

この MFC アプリでは、通常のクリーンな終了は CWinApp::ExitInstance() を呼び出し、次に CWinApp::~CWinApp を呼び出します。ただし、exit(1) が呼び出されると、CWinApp::~CWinApp のみが起動し、ExitInstance はスキップされます。exit(1) を MFC で使用すべきではないことはわかっていますが、何百もの場所でそれを使用するレガシー アプリがあり、それを PostMessage またはまったく異なるものに置き換えることには慎重です。

ここでの最善の解決策は何ですか?

  1. ExitInstance が実際に呼び出されるように、いくつかの魔法のウィンドウ処理を行います
  2. exit(1) を別のものに置き換えますが、そうしたくありません。
  3. 何らかの形で atexit を使用して ExitInstance を呼び出します
  4. まだ呼び出されていない場合は、CWinApp dtr に ExitInstance を呼び出してもらいます
  5. ExitInstance を空にして、dtr ですべてのクリーンアップを実行してみてください。多分無理?
  6. 他の?
4

1 に答える 1

2

で行っている作業の種類によって異なりますExitInstance。それが何をしているのか、コンテキストの変更がどのように影響するのかを確実に理解する必要があります。

その警告を踏まえて、最も明白なアプローチは、実行中の作業をExitInstance別の手順に移動することですMyExitInstance. MyExitInstanceから電話ExitInstanceexitへの呼び出しを、 を呼び出してからを呼び出すプロシージャへの呼び出しに置き換えMyExitInstanceますexit

ExitInstanceここでは、フレームワークがあなたのために行っていることではなく、それが重要なのはあなた自身のコードだけであると想定していることに注意してください。

于 2013-05-24T02:29:08.000 に答える