我想为我的问题找到一个可行的解决方案,即“在加载 DLL 依赖项之前更改进程 PATH 变量”。
在详细解释之前,我想总结一些不能修改的需求。我在这里的其他帖子中找到了一些解决方案,但没有人满足它们:
- 我正在使用 MinGW GCC,并且不允许使用其他工具链(甚至是 MS VS)。
- 使用计算机设置更改系统(或用户)PATH 变量不是一种选择,并且复制主 DLL 的路径不是系统路径。
- (当然)不可能在加载它的应用程序的同一路径中使用主 DLL(否则这篇文章将是一派胡言)。
- 无法使用 LoadLibrary 加载从属 DLL。
因此,我创建了一个名为 main.dll 的 DLL,它依赖于 A.dll,它位于 main.dll 的同一目录中,但与可执行文件不同。
我想在加载 A.dll 之前在 DllMain 或其他任何地方执行 GetModuleFileName 和 SetEnvironmentVariable ,因此我只能为正在运行的进程修复 PATH 变量。
我发现解决此问题的唯一方法是创建一个简单的新 main.dll,它发布与原始 main.dll 相同的方法,在 DllMain 更改路径,然后在第一次调用其中一个方法时执行一个加载库。主要问题是我有不同版本的 main.dll,具有不同的公共方法,而且我必须在创建新 main.dll 的任何时候创建一个新的“桥”,这非常烦人(并且也可能有错误) .
我阅读了有关延迟加载的信息,但我还没有找到可以与 MinGW 一起使用的方法。
有任何想法吗?
非常感谢!!!