gpt4 book ai didi

c++ - 在获取DLL_PROCESS_DETACH之前需要DLL已关闭的通知

转载 作者:行者123 更新时间:2023-12-03 07:03:40 25 4
gpt4 key购买 nike

我们有一个使用C++ 11在Visual Studio中构建的DLL。此时,我们的DLL具有固定的API,并且包括openclose函数(以及其他功能)。我们允许用户多次关闭openclose,而无需关闭应用程序。在我们的DLL中,我们使用的是第3方库,它不仅具有openclose,而且还具有initializeuninitializeopenclose与我们的openclose紧密对应,但是initializeuninitialize在启动和关闭时仅被调用一次。我只能从我们的initialize函数中调用他们的open,但是我找不到可以调用uninitialize的地方,因为我不知道何时将要关闭该应用程序。调用它的最合乎逻辑的地方是DllMain下的DLL_PROCESS_DETACH函数,虽然在调试下运行时可以正常工作,但是当我在发行版下运行时,我们收到未处理的异常,“请求致命程序退出”。如果我只是放弃并删除了他们的uninitialize调用,我仍然会遇到未处理的异常,在任何情况下都不会彻底关闭。
有什么方法可以在DLL_PROCESS_DETACH之前获得信号/通知,表明应用程序已关闭?

最佳答案

DLL中没有此类通知。 DllMain()是DLL知道发生了什么的唯一位置。它的lpReserved参数将告诉您DLL_PROCESS_DETACH是否归因于对FreeLibrary()的调用。这就是您从系统中获得的所有信息。
调试代码以找出发生异常的原因,然后对其进行修复或捕获。
或者,跟踪您的DLL的open()close()被调用了多少次。在第一个initialize()上调用库的open(),在最后一个匹配的uninitialize()上调用库的close()。然后确保该应用在关机时调用您的close()
或者,将自己的initialize()uninitialize()添加到您的DLL中以调用该库的相应功能,然后使该应用在启动/打开时调用initialize(),在关闭时调用uninitialize()

关于c++ - 在获取DLL_PROCESS_DETACH之前需要DLL已关闭的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64035942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com