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

发布于 2024-11-24 05:52:59 字数 597 浏览 2 评论 0 原文

我们创建一个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 本文获取 DLL 的路径/名称提供了一种这样的方法 - (但尝试成功。生成的 exe 崩溃)。这是正确的方法吗?

We create a DLL for other applications to load and use some of the functionality in the application. The DLL has dependency on the the actual path where it is loaded from.

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

It needs the product_home location to read config files and load jar files etc

My windows application proloads a special DLL. I need to find actual path to a loaded DLL with in the process and use it to set a "HOME" variable. This will be used in rest of the processing. Using an externally set environment variable some time fails when there are multiple versions of dll present on the machine. To me it looks like DLL can figure out its own "product_home" as long it can get the actual loaded location.

The DLL This article Get Your DLL's Path/Name provides one such way- (yet to try it successfully. The generated exe crashes). Is this the correct approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼藏柔 2024-12-01 05:52:59

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

Either I don't understand your need, or the link you mention is not what you need. If I understand you correctly, you'd like to get the full path of a certain DLL loaded by the process. So, say that DLL is "kernel32.dll", you'd like to get "c:\windows\system32\kernel32.dll". Please correct me if I'm wrong.

If that's what you want, the easiest way to do that would be:

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

Failures checks omitted for brevity - read more about GetModuleHandle and GetModuleFileName.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文