0

使用我们的 MFC 应用程序,正常的干净退出调用 CWinApp::ExitInstance(),然后调用 CWinApp::~CWinApp。但是如果 exit(1) 被调用,只有 CWinApp::~CWinApp 触发,ExitInstance 被跳过。我知道 exit(1) 不应该与 MFC 一起使用,但我们有一个旧版应用程序在 100 多个地方使用它,我对用 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从调用ExitInstance。将调用替换为对调用然后调用exit的过程的调用。MyExitInstanceexit

请注意,我在这里假设仅在您自己的代码中ExitInstance,而不是框架可能为您做的任何事情。

于 2013-05-24T02:29:08.000 回答