如何获取 DLL 的文件名?
Posted
技术标签:
【中文标题】如何获取 DLL 的文件名?【英文标题】:How to get the filename of a DLL? 【发布时间】:2009-05-10 20:27:23 【问题描述】:我有一个 C++ Windows 应用程序 myapp.exe,它加载了几个插件。
插件需要找到其 DLL 的路径。我可以为此使用 GetModuleFileName,但它需要插件 DLL 的句柄。我不知道从哪里得到这个手柄。 GetModuleHandle(NULL) 返回可执行文件的句柄。
一种选择是使用 GetModuleHandle (GetModuleHandle("myplugin.dll") ) ,但这需要对插件的名称进行硬编码,我想避免这种情况。
感谢任何帮助。
保罗
【问题讨论】:
【参考方案1】:我不知道从哪里弄到这个句柄
它作为参数传递给您的 DLLMain() 入口函数。
如果插件不能访问它的DLLMain()入口函数,它可以在它自己的一块内存上使用VirtualQuery函数,并使用填充的MEMORY_BASIC_INFORMATION结构的AllocationBase字段作为它的HMODULE。
【讨论】:
非常感谢克里斯。这是我使用的函数: HINSTANCE GetMyModuleHandle() MEMORY_BASIC_INFORMATION mbi; VirtualQuery(GetMyModuleHandle, &mbi, sizeof(mbi));返回(HINSTANCE)(mbi.AllocationBase);以上是关于如何获取 DLL 的文件名?的主要内容,如果未能解决你的问题,请参考以下文章
C ++如何从DLL(Windows)的文件名中获取进程ID?
如何获取 Java.exe/jvm.dll 的符号文件以分析崩溃核心转储文件?