如何在Windows进程中找到加载的DLL的实际路径(XP / Windows 7)

时间:2011-07-15 10:14:37

标签: windows dll win32-process

我们为其他应用程序创建一个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崩溃)。这是正确的方法吗?

1 个答案:

答案 0 :(得分:6)

要么我不理解你的需要,要么你提到的链接不是你需要的。如果我理解正确,您希望获得该进程加载的某个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