如何获取 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?

如何获取当前正在执行的 DLL 的位置?

delphi如何获取DLL所在的目录

如何获取 Java.exe/jvm.dll 的符号文件以分析崩溃核心转储文件?

如何在 Windows 上获取 lib_mysqludf_sys.dll 文件

如何从 C# 中的 C++ dll 中的全局变量从函数中获取返回数组?