我们为其他应用程序创建一个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崩溃)。这是正确的方法吗?
答案 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);
为简洁起见,省略了失败检查 - 详细了解GetModuleHandle和GetModuleFileName。