2

我们有一个使用 C++11 在 Visual Studio 中构建的 DLL。此时我们的 DLL 有一个固定的 API,它包括一个openandclose函数(以及其他)。我们允许我们的用户在不关闭应用程序的情况openclose多次使用。在我们的 DLL 中,我们使用了一个第三方库,它不仅有一个openand close,还有一个initializeand uninitialize

openandclose映射到我们的and opencloseinitializeanduninitialize每次只能调用一次,在启动和关闭时。我initialize只能从我们的函数中调用它们一次open,但我找不到调用的地方uninitialize,因为我不知道应用程序何时将关闭。调用它的最合乎逻辑的地方是DllMainDLL_PROCESS_DETACH. 如果我只是放弃并删除他们的uninitialize电话,我仍然会得到一个未处理的异常,并且在任何情况下我都不会干净地关闭。

有没有办法获得应用程序在之前关闭的信号/通知DLL_PROCESS_DETACH

4

1 回答 1

0

DLL 中没有这样的通知。 DllMain()是 DLL 知道发生了什么的唯一地方。它的lpReserved参数会告诉你是否DLL_PROCESS_DETACH是由于调用FreeLibrary()。这就是您从系统中获得的全部内容。

调试代码以找出异常发生的原因,然后修复或捕获它。

或者,跟踪您的 DLLopen()close()被调用的次数。initialize()在 1stopen()调用 lib ,uninitialize()在最后一次匹配调用 lib close()。然后确保应用程序close()在关机时调用您。

或者,将您自己的initialize()和添加uninitialize()到您的 DLL 以调用 lib 的相应函数,然后让应用程序initialize()在启动/打开和uninitialize()关闭时调用您的。

于 2020-09-23T21:08:05.210 回答