1

我想为我的问题找到一个可行的解决方案,即“在加载 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 一起使用的方法。

有任何想法吗?

非常感谢!!!

4

0 回答 0