[Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02
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);
}
}
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);
}
}
SetUnhandledExceptionFilter(ShowCallerModuleName)
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);
}
}
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);
}
}
SetUnhandledExceptionFilter(ShowCallerModuleName)
[Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02相关推荐
- [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE
在有些情况下需要得到函数调用者的模块名字.比如你想限制你的某个函数只能被自己某个特定的DLL调用. 或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常. API函数_ReturnAddress ...
- windows编程常用系统API函数
windows编程常用API的函数 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 6. API之菜单函数 7. AP ...
- Windows编程之使用GetAsyncKeyState()函数为什么要( 0x8000)?
Windows编程之使用GetAsyncKeyState()函数为什么要(& 0x8000)? 先来看看GetAsyncKeyState()函数的原型: SHORT GetAsyncKeyS ...
- Windows编程之--桌面壁纸实现深入探索
本文原创,最早发表于公司内部博客, 禁止转载 文章目录 一. 前言 二. Windows桌面壁纸原理 1. 桌面窗口层次 2. 桌面嵌入窗口实现壁纸 2.1. Desktop Window Manag ...
- Windows 编程
Delphi 利用Object Pascal 和可视控件库(VCL)对底层的Windows API 进行了完美的封装,所以很少需要使用基础Pascal 语言来建立Windows应用程序,也无需直接调用 ...
- 【Windows编程】windows窗口创建过程详解
文章目录 前言 1 应用程序的分类 2 应用程序分类的对比 3 编译工具 4 windows库文件和头文件 5 WinMain函数和MessageBox函数初始 6 窗口类 7 窗口类的分类 8 注册 ...
- 浅谈windows 编程中SendMessage函数的妙用!!!
windows编程中SendMessage函数是非常重要的,而且这个对于理解windows的消息机制也很重要.本文用代码的方式实现了一些功能,借以说明此函数之妙用.说明不当之处,希望批评指正,谢谢! ...
- Qt:Windows编程—代码注入
前言 这里所说的代码注入和上篇的DLL注入有类似之处.DLL文件的注入与卸载在上篇中都完成了,整个注入与卸载的过程其实就是让远程线程执行一次LoadLibrary函数或者FreeLibrary函数 ...
- Windows编程—Windows驱动中定时器的使用
文章目录 Windows编程-Windows驱动中定时器的使用 前言 代码 简单版 升级版 程序效果 Windows编程-Windows驱动中定时器的使用 前言 定时器操作是应用编程中非常常见的操作, ...
最新文章
- python几种数据类型的取值方式
- [转载] 七龙珠第一部——第057话 小雨对布鲁
- Eclipse常用的高效插件
- 三种常见中文内码的转换方法
- java依赖和约束有啥区别_Java – Maven依赖关系太多了
- 【kruskal】【倍增】严格次小生成树(P4180)
- Web前端体系的脉络结构
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管
- 用计算机怎样给文章分解,计算机试卷6分解..pdf
- linux路由器实际配置案例
- Repeater OnItemCommand 失效
- linux ac 命令
- Java语言的八大优点
- 如何开始Java机器学习
- PHP(euc) + Smarty(euc) で、UTF-8やSJIS出力する方法(解決策とまとめ)
- “人人皆可成为AI开发者”!百度世界大会官宣百度松果学堂成立
- 2017世界GDP排行地图可视化
- OpenGL ES 绘制图片
- 达梦dsc搭建+dw
- 用Nero刻录ISO镜像制作启动光盘