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

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

2008-11-7 02:37
10988

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++程序使用它.
谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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