【发布时间】:2020-09-23 20:44:16
【问题描述】:
我们有一个使用 C++11 在 Visual Studio 中构建的 DLL。此时我们的 DLL 有一个固定的 API,它包括一个 open 和 close 函数(等等)。我们允许我们的用户在不关闭应用程序的情况下多次open 和close。在我们的 DLL 中,我们使用了一个第三方库,它不仅有 open 和 close,而且还有 initialize 和 uninitialize。
open 和 close 与我们的 open 和 close 紧密映射,但 initialize 和 uninitialize 在启动和关闭时只能调用一次。我只能从我们的open 函数中调用他们的initialize 一次,但我找不到调用uninitialize 的地方,因为我不知道应用程序何时将被关闭。调用它的最合乎逻辑的地方是在DLL_PROCESS_DETACH 下的DllMain 函数中,虽然这在调试下运行时有效,但当我在发布下运行时,我们得到一个未处理的异常,“请求致命程序退出”。如果我只是放弃并删除他们的uninitialize 呼叫,我仍然会得到一个未处理的异常,并且在任何情况下我都不会干净地关闭。
有什么方法可以在DLL_PROCESS_DETACH 之前获得应用程序正在关闭的信号/通知?
【问题讨论】:
-
你需要先研究为什么未处理的异常
-
以及您之前需要此通知的原因是什么?为什么你决定
uninitialize没有在这个通知中崩溃? -
应用程序致命退出 (
FAST_FAIL_FATAL_APP_EXIT) 可能因各种原因发生,例如调用 Cabort。要直接解决问题,您需要分析异常,找到直接原因,并通过断点进一步调查。这可能是一个上游错误,您可以报告并解决它,直到它得到解决。