【问题标题】:How can I find actual path to a loaded DLL with in a windows process (XP /Windows 7)如何在 Windows 进程(XP/Windows 7)中找到加载的 DLL 的实际路径
【发布时间】:2011-07-15 10:14:36
【问题描述】:

我们为其他应用程序创建一个 DLL 以加载和使用应用程序中的某些功能。 DLL 依赖于加载它的实际路径。

  <product_home>/bin/<DLL is here>
              |
              |----/configdir/configfile
              |----/lib/<java jarfiles>

它需要 product_home 位置来读取配置文件和加载 jar 文件等

我的 Windows 应用程序加载了一个特殊的 DLL。我需要在进程中找到加载的 DLL 的实际路径,并使用它来设置“HOME”变量。这将用于其余的处理。当机器上存在多个版本的 dll 时,使用外部设置的环境变量有时会失败。在我看来,DLL 似乎可以找出自己的“product_home”,只要它可以获取实际加载的位置。

DLL 这篇文章Get Your DLL's Path/Name 提供了一种这样的方法——(还没有尝试成功。生成的exe 崩溃了)。这是正确的方法吗?

【问题讨论】:

    标签: windows dll win32-process


    【解决方案1】:

    要么我不明白你的需要,要么你提到的链接不是你需要的。如果我理解正确,您希望获取进程加载的某个 DLL 的完整路径。因此,假设 DLL 是“kernel32.dll”,您想获得“c:\windows\system32\kernel32.dll”。如果我错了,请纠正我。

    如果这是您想要的,最简单的方法是:

    HMODULE hModule = GetModuleHandle(_T("kernel32.dll"));
    TCHAR dllPath[_MAX_PATH];
    GetModuleFileName(hModule, dllPath, _MAX_PATH);
    

    为简洁起见省略了失败检查 - 阅读有关 GetModuleHandleGetModuleFileName 的更多信息。

    【讨论】:

    • 是的,按照我阅读问题的方式,这是正确的答案。尽管使用硬编码的名称字符串调用GetModuleHandle 似乎毫无用处。更有意义的是,您已经拥有要查找路径的 DLL 的 HMODULEHINSTANCE
    • 感谢您改进问题。
    • @Cody 如果您使用隐式链接到您知道其名称的 DLL,那么您只需使用名称部分(即没有路径)调用 GetModuleHandle。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2011-03-01
    相关资源
    最近更新 更多