欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
OllyDbg的help-分析模块介绍 视窗XP Pro/2003 Enterprise Server算号器
未知  类以自已的成员函数作回调函数,并且几个实例同时存在。
[ 发布日期:21年前 (2004-08-07) ]   [ 来自:Original ] [分类:C\C++相关]
在此专做了一个类(CTempBoard),演示这个类以自已的成员函数作回调函数,并且几个实例同时存在。

    如果你只是想用这种方法,那你只要保持原码中CTempBoard类的大体框架,然后你可以任一实现你的功能。
    如果你想看懂那个类,建议先看看文章1,以便了解VC中this指钟的实现、虚函数定位。
    对了,一定要记得使用这个方法的类,只能有一个虚函数:你的回调函数(当然你如果理解的话,你可以修改,其中文章2便作过解说)。

下面还是对CTempBoard讲解一下吧:

#define WM_VALUE_READY WM_USER+500 //自定义消息
typedef unsigned char ThunkData[9]; //存放自动生成代码的空间为9

class CTempBoard 
{
public:
CTempBoard();
~CTempBoard();

void Start(HWND hWnd, UINT uElapse=1000); //启运这个类的自动功能
void Stop(); //停止这个类的自动功能

int m_Value;
private:
ThunkData m_ThunkData; //用来存放代码的数组
UINT m_Timer;
HWND m_hWnd;

virtual LRESULT TimerPro(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
//生成代码存放于m_ThunkData中
void inline ThunkInit();
};


CTempBoard::CTempBoard()
{
m_Value=0;
m_Timer=-1;
ThunkInit();
}

CTempBoard::~CTempBoard()
{
Stop();
}

void inline CTempBoard::ThunkInit()
{
m_ThunkData[0] = 0xB9;    // mov ecx, 
*((DWORD *)(m_ThunkData+1)) = (DWORD)this;
*((WORD *)(m_ThunkData+5)) = 0x018B; // mov eax, [ecx]
*((WORD *)(m_ThunkData+7)) = 0x20FF; // jmp [eax]
//通过这个函数,我们在m_ThunkData存入了如下代码:
//mov ecx, this;
//mov eax, [ecx];
//jmp[eax];
}

void CTempBoard::Start(HWND hWnd, UINT uElapse)
{
Stop();
m_hWnd=hWnd;
m_Timer=::SetTimer(0, 0, uElapse, (TIMERPROC)(void *)m_ThunkData);
//在此我们以m_ThunkData的地址为回调函数地址,
//所以当时间到时,它会跑到m_ThunkData的地址去执行,
//而在那里我们存入了this指针,然后才真正调到TimerPro,这样类成员函数便可以正常运行了
}

void CTempBoard::Stop()
{
::KillTimer(0, m_Timer);
}


LRESULT CTempBoard::TimerPro(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
//成员函数,可以存取成员变量,也可调用成员函数。
this->m_Value=::rand()%101;
::SendMessage(m_hWnd, WM_VALUE_READY, m_Value, (long)this);
return 0;
}


引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/20
复制引用地址https://www.rickw.cn/trackback/20/GBK
[ 分类:C\C++相关  | 查看:716 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5