首页
社区
课程
招聘
[原创][代码之美][自主命题]利用Thunk技术将Win32回调函数转换为C++成员函数
发表于: 2008-11-7 02:37 11768

[原创][代码之美][自主命题]利用Thunk技术将Win32回调函数转换为C++成员函数

2008-11-7 02:37
11768

Thunk : 将一段机器码对应的字节保存在一个连续内存结构里,
然后将其指针强制转换成函数. 即用作函数来执行.

这份代码用于将C语方的回调函数转换为具有this指针的C++成
员函数.

在Windows系统编程中, 可以将一些系统回函数封装成C++类成
员函数, 例如

// 定时器回调函数
VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg,
UINT_PTR idEvent, DWORD dwTime);

// 线程回调函数
DWORD WINAPI ThreadProc(LPVOID lpParameter);

// 窗口过程回调函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg,
WPARAM wParam, LPARAM lParam);

2008-10-22修正了在Windows XP SP2, Windows server 2003环
境下开启DEP功能后运行崩溃的BUG

附件为VC++6.0源码及测试程序

欢迎拍砖, 但希望更多的C++程序使用它.
谢谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,能加入x64支持就更好了
2008-11-7 11:34
0
雪    币: 258
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
我没有x64环境, 所以代码中也没有判断
2008-11-7 13:21
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4
上个星期在逆向一个WTL程序时发现它对于CEdit控件的子类化(GWL_WNDPROC)就用到了LZ代码中的stdcall的方式(但稍有不同),当时觉得很新鲜就写下来留了个纪念,没想到LZ的代码都已经这么完善了,赞一个. :)
2008-11-10 15:03
0
雪    币: 258
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
谢谢!
2008-11-10 17:25
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
羡慕!!我要努力了@_@
2008-11-11 12:28
0
游客
登录 | 注册 方可回帖
返回
//