【问题标题】:GetModuleFileName() not giving the correct path of DLL [closed]GetModuleFileName() 没有给出正确的 DLL 路径 [关闭]
【发布时间】:2021-01-24 05:43:55
【问题描述】:

我使用两个目录来运行应用程序,我将 EXE 文件放在一个目录中,将 DLL 放在另一个目录中;执行 EXE 后,我想在运行时加载另一个 DLL,所以我使用GetModuleFileName() 获取工作 DLL 路径以从同一目录加载另一个 DLL。但是,它返回的是可执行目录路径而不是 DLL 的路径,所以我无法加载另一个 DLL。

【问题讨论】:

  • 如果您传递DLL的模块句柄,它将返回您想要的路径。您最好并排使用组件并让装载机处理所有事情。或者甚至只是将 DLL 与可执行文件放在同一目录中。

标签: c++ winapi msdn


【解决方案1】:

根据document

正在请求其路径的已加载模块的句柄。如果该参数为NULLGetModuleFileName获取当前进程的可执行文件路径。

所以请确保您正确传递了DLL 的实例。

我创建了一个样本进行测试:

char result[MAX_PATH];
HMODULE hDLL = LoadLibrary("D:\\test\\Dll1.dll");
GetModuleFileNameA(hDLL, result, MAX_PATH);

它对我有用:

【讨论】:

  • 当我硬编码路径时它正在工作,但我需要在运行时获取路径。我为其他应用程序编写了相同的逻辑,它们按预期工作。
  • @Vipin GetModuleFileName 工作正常。问题出在您的期望或您的代码中。如果您不显示您的代码,那么您将不得不自己解决问题。我建议您更仔细地再次阅读此答案。请注意代码如何在运行时调用GetModuleFileName 并获取模块的路径。在这段代码中没有任何地方硬编码到result
  • @Vipin 如果你硬编码路径时它可以工作。也许你的代码sn-ps的其他部分有问题,也许你可以显示你的代码以便我们找到问题。跨度>
  • 谢谢大家,现在它按预期工作,我得到 NULL 这就是为什么它获取 exe 路径而不是 dll 路径。
  • 如果此答案对您有所帮助,请随时标记它以帮助遇到相同问题的人,如果您有任何问题,请告诉我。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
相关资源
最近更新 更多