通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
来源:互联网 发布:手机定时打铃软件 编辑:程序博客网 时间:2024/05/15 04:00
转自http://blog.csdn.net/WinGeek/archive/2009/02/10/3872526.aspx
在有些情况下需要得到函数调用者的模块名字。比如你想限制你的某个函数只能被自己某个特定的DLL调用。 或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常。
API函数_ReturnAddress 和GetModuleHandleEx 函数可以帮助我们达到这个目的。以下代码演示它们的用法:
- void ShowCallerModuleName()
- {
- HMODULE hCallerModule = NULL;
- TCHAR szModuleName[MAX_PATH] = _T("");
- void *callerAddress = _ReturnAddress();
- if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)callerAddress, &hCallerModule))
- {
- GetModuleFileName(hCallerModule, szModuleName, ARRAYSIZE(szModuleName));
- MessageBox(NULL, szModuleName, _T("Who is calling me?"), MB_OK);
- }
- }
解释:
_ReturnAddress 可以给你所在函数的返回地址,也就是调用者的地址。
GetModuleHandleEx 可以给你某个地址所在的模块Handle 。 得到这个Handle 之后,就可以用GetModuleFileName 来得到模块的文件名了。
如上面提到的,我们可以用这个方法来捕捉是哪个DLL/EXE抛出异常。 在程序入口加入
- SetUnhandledExceptionFilter(ShowCallerModuleName);
- 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
- 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
- [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
- 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE(转)
- [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
- 通过uiview 得到所在的viewcontroller
- exe函数与dll函数的相互调用
- 得到函数所在脚本的绝对路径
- 得到一个正在运行进程的 EXE 文件所在目录
- 得到字符所在的位置,,通过位置得到该位置所在的字符
- C++ 获取exe(或dll)所在的路径
- Rundll32.exe 调用DLL自定义导出函数
- 通过IMAPIAdviseSink得到更改条目所在的Folder
- JNI的学习(Java调用C++函数,通过DLL)
- 通过序号(索引)调用dll里面的函数
- 通过函数调用找出数组中的最大值及其所在的行和列.Cpp
- 如何的确定调用的dll所在的路径
- C++ ----调用exe的函数
- cache 和 buffer的区别
- Silverlight custom control属性的配置
- oracle 在HP-UX下面的自启动
- ISMG(互联网短信网关,详细介绍)
- sql分页
- 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
- 标题:普通行列转换(version 2.0) 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
- The 10 Technologies that Will Help You Stay Employed
- linux的chmod,chown命令 详解
- 虚成员函数和非虚成员函数调用方式有什么不同?
- 正则匹配
- C语言调用Python模块(Ubuntu Linux)
- 存储过程实现sybase分页
- 用C语言扩展Python的功能