如何获得当前所在的DLL模块名称
来源:互联网 发布:excel表格相同数据筛选 编辑:程序博客网 时间:2024/05/19 22:50
起因:
因为工作需要,写了一个小工具,嵌入到各个项目中(这些项目都是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项目).然后,在这个工具可以输出一些信息到日志文件.当然,输出信息需要标明这些信息来自哪个程序模块.首先,就想到了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模块名称
- 如何获得当前执行脚本所在的目录名称
- 如何获得当前设备的名称
- 如何得到当前所在的sql的数据库名称
- 如何获得当前执行程序所在的路径
- C#如何获得当前程序所在的目录
- 如何获得当前本进程所在的目录
- 如何获取指定内存所在的模块、当前模块、当前函数的返回模块
- 如何获取指定内存所在的模块、当前模块、当前函数的返回模块
- 如何获得当前应用程序所在路径
- 如何在java方法中获得当前方法的名称
- 获得当前项目exe\dll所在系统位置
- 获得当前 程序(.exe) 以及 动态库(.dll) 所在路径
- 获得当前文件(夹)所在的绝对路径
- html获得当前焦点所在的控件
- 获得当前split所在的文件名
- 如何获取当前应用app所在的进程id和进程名称
- 关键字:HTTP POST URL-encode(困扰我5天的问题)
- RSS阅读中潜在的安全问题 【 综合文 】
- Velocity学习笔记3——Velocity 模板语言(VTL: Velocity Template Language)简介
- 第一篇
- 使用AQTime 例子
- 如何获得当前所在的DLL模块名称
- c/s结构和b/s结构的区别或其优缺点
- 超越图灵机(二)——神秘的不可数无穷大
- 电脑报的HackGame,没意思
- 超越图灵机(三)——探索生命的奥秘
- 彻底崩溃,一个电脑白痴和黑客的对话!
- 文献管理软件使用[keep updating]
- 一个用C#写的无限结点树的原码
- 不喜欢出差!