c - 调用 FreeLibrary 后 DLL 仍然被锁定
问题描述
我的架构如下:
- Program.exe 链接到 1.dll
- 1.dll尝试通过LoadLibrary加载某个目录(即2.dll)中的DLL文件
- 1.dll 尝试通过GetProcAddress("setup") 找到一个名为"setup" 的函数
- 1.dll 做了一些工作,可能会释放 2.dll
- 用户可能希望更改目录中的 DLL,包括删除 DLL(无需重新启动软件)
我遇到的问题是,我的示例中的 2.dll 仍然处于锁定状态(错误 32),即使在调用了 FreeLibrary 之后也是如此。
在我最初的测试中,Program.exe 可以 LoadLibrary,对它和 FreeLibrary 进行解锁,然后将相同的功能转移到 1.dll 中,Program.exe 也通过 LoadLibrary 加载,并且该过程继续完美运行。
为了避免动态加载 1.dll,我将它与 Program.exe 链接,这似乎已经破坏了它,因为除了更改链接之外没有其他任何改变,并且 1.dll 加载的 dll 保持锁定直到程序终止, FreeLibrary 仍然返回 true。
由于我需要动态加载大量函数,这似乎相当不切实际,我想解决其他 dll 被锁定的问题。如何让程序释放未使用的文件,就像我将 1.dll 链接到它之前所做的那样?
解决方案
推荐阅读
- javascript - 如何比较当前字符串与javascript中给定的n个字符串相同
- python - “使用功能打开”失败
- c++ - 在 main() 之前调试 Windows 服务失败(由 LocalSystem 用户运行时出现错误 1053)
- azure-active-directory - Azure AD B2C - 在社交登录期间如何在合并之前询问并验证现有本地帐户的密码
- opengl - 用 pbo 生成 mipmap 太慢?
- php - 使用 php 和 ajax 插入和更新 sql 查询
- android - 在 google fit 中提供数据
- vue.js - 使用 nyc“全部”选项的赛普拉斯代码覆盖率不会将源代码报告为“未覆盖”
- elasticsearch - Elasticsearch 无法使用术语和存在查询检索数据
- keycloak - 如何在 Keycloak .ftl 模板中加载用户数据?