2

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

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

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

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

The DLL This article Get Your DLL's Path/Name提供了一种这样的方法——(尚未成功尝试。生成的 exe 崩溃)。这是正确的方法吗?

4

1 回答 1

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的更多信息。

于 2011-07-15T12:06:56.540 回答