gpt4 book ai didi

c++ - 应该在程序结束时调用 FreeLibrary 吗?

转载 作者:行者123 更新时间:2023-12-04 01:06:14 28 4
gpt4 key购买 nike

我没有在文档中找到这个:如果我需要一个 DLL 处理程序直到程​​序结束,我是否仍然应该在我的调用程序结束之前调用 FreeLibrary,还是不需要?

最佳答案

最佳做法是始终为任何相应的LoadLibrary 调用调用FreeLibrary。但是,跳过该调用并仅结束您的程序可能不会导致任何严重问题,因为终止调用过程似乎与减少 DLL 的“引用计数”具有相同的效果(如调用 FreeLibrary 会做)。

来自Microsoft documentation (加粗我的):

The reference count is decremented each time the FreeLibrary orFreeLibraryAndExitThread function is called for the module. When amodule's reference count reaches zero or the process terminates, thesystem unloads the module from the address space of the process.Before unloading a library module, the system enables the module todetach from the process by calling the module's DllMain function, ifit has one, with the DLL_PROCESS_DETACH value. Doing so gives thelibrary module an opportunity to clean up resources allocated onbehalf of the current process. After the entry-point function returns,the library module is removed from the address space of the currentprocess.

最好显式调用 FreeLibrary() 的一个原因是,如果/当该调用返回失败(即零)时,您可以处理这种情况地位。关于您的 DLL 无法正确卸载的具体方式或原因的详细信息超出了本答案的范围,但您可能会发现此讨论很有帮助:What to do when FreeLibrary API call fails?

另一个原因是您的代码的任何 future 开发人员可能没有意识到您正在使用程序终止来隐式 卸载 DLL,并且在某些情况下,这可能会导致进一步的问题。

关于c++ - 应该在程序结束时调用 FreeLibrary 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66352969/

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