如何获得当前所在的DLL模块名称

原创 2006年05月31日 10:48:00
起因:
    因为工作需要,写了一个小工具,嵌入到各个项目中(这些项目都是DLL项目).然后,在这个工具可以输出一些信息到日志文件.当然,输出信息需要标明这些信息来自哪个程序模块.首先,就想到了GetModuleFileName,一查MSDN,第一个参数hModule无法提供,如果提供NULL,只能得到创建进程的那个EXE文件。又顺藤摸瓜,找到了GetModuleHandle函数。然而,问题仍然存在:GetModuleHandle需要一个lpModuleName参数,这不是死循环了么?想寻觅一个GetCurrentModuleHandle,没有;google,无果。郁闷之余,看到HMODULE的本质:模块的起始地址。
    至此,至少我可以有个笨办法解决了:枚举所有模块,排序。然后用当前函数地址去匹配模块句柄,比函数地址小的句柄中最大的那个句柄,就是当前模块句柄。方法有点笨,但是可行。
    忽然想到,GetModuleHandleEx是不是有额外的功能呢?查阅之下,大喜,于是如下获得当前模块文件名: 
        HMODULE hModule = NULL;
        GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
            (LPCSTR)&getLogFile, //这是函数名,强转
           &hModule);
        DWORD len = GetModuleFileNameA(hModule, buffer, sizeof buffer);

成功!猜想,之所以要提供一个函数地址作为参考,大概和我想到的方法也类似吧?只是也许它内部不需要枚举,直接访问模块列表就可以了。

DLL中如何获取自身的路径

问题:DLL中如何获取DLL自身所在的文件夹,而不是主调程序的。用GetCurrentDirectory获取的是exe主调程序所在的目录,不符合我的要求;用GetModuleFileName只能在Dl...
  • jiangqin115
  • jiangqin115
  • 2015年05月01日 00:59
  • 7959

获取当前工作路径和当前模块路径

&1 涉及的函数 GetCurrentDirectory:返回当前进程的当前目录,并不一定返回你的exe应用程序的目录    如果你在应用程序中调用了打开文件对话框,你选择了一个文件,那么...
  • sophia_xw
  • sophia_xw
  • 2017年04月14日 09:36
  • 626

获得当前的模块名或者模块句柄

回答一个网友的问题.如何取OCX在运行时内存的地址.告诉它直接用ModuleHandle就行了.这个就是它在内存中的地址. 然后他又问我怎么取当前的ModuleHandle.Delphi中很方便,系统...
  • wr960204
  • wr960204
  • 2008年04月21日 16:06
  • 3723

DLL获取当前文件目录和DLL调试方法

GetModuleFileName可以获得指定模块的路径,如果传入NULL,则输出所在进程exe的路径,因此在DLL中要想获得当前DLL的路径,必须获得DLL的实例。这样我们才能得到当前DLL的路径,...
  • wenzhou1219
  • wenzhou1219
  • 2016年03月12日 22:27
  • 2951

C++获取当前模块的路径(dll/exe)

最近整理了一些获取当前模块路径的代码,都是通过调用 GetModuleFileName() 来获取 DWORD WINAPI GetModuleFileName( _In_opt_ ...
  • oyt123
  • oyt123
  • 2015年02月05日 18:57
  • 3431

C++ 获取exe(或dll)所在的路径

通过调用函数GetInstanceFolderPath()获取当前exe或dll文件所在的路径。 详细代码如下: string GetInstanceFolderPath(void)    ...
  • yanfk
  • yanfk
  • 2016年12月11日 15:31
  • 1206

DLL中如何获取自身的句柄

如题: 一个EXE加载了一个DLL。我想在DLL中动态的获取DLL本身的实例句柄.有没有什么方法? 我不想使用DllMain中保存全局句柄的方法。 说明: (1) MFC扩展DLL中 int Dl...
  • jiangqin115
  • jiangqin115
  • 2015年04月27日 16:57
  • 3581

windows 获取当前模块所在文件夹路径

1.getmodulepath.h #ifndef GETMODULEPATH #define GETMODULEPATH #include #include /** * @class ge...
  • sunxianliang1
  • sunxianliang1
  • 2017年06月07日 10:11
  • 396

DLL获取当前文件目录和DLL调试方法

GetModuleFileName可以获得指定模块的路径,如果传入NULL,则输出所在进程exe的路径,因此在DLL中要想获得当前DLL的路径,必须获得DLL的实例。这样我们才能得到当前DLL的路径,...
  • wenzhou1219
  • wenzhou1219
  • 2016年03月12日 22:27
  • 2951

获取进程列表和模块信息

获取本地进程列表与进程模块信息
  • enjoy5512
  • enjoy5512
  • 2016年06月02日 20:02
  • 3086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何获得当前所在的DLL模块名称
举报原因:
原因补充:

(最多只允许输入30个字)