首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

hook 中HOOKPROC 类函数,该怎么解决

2012-02-15 
hook 中HOOKPROC 类函数m_procHookSetWindowsHookEx(WH_SHELL,(HOOKPROC)ShellProc,hinstDLL,m_pi.dwThre

hook 中HOOKPROC 类函数
m_procHook   =   SetWindowsHookEx(WH_SHELL,   (HOOKPROC)ShellProc,   hinstDLL,m_pi.dwThreadId);

大部分例子和代码“(HOOKPROC)ShellProc”   是全局函数或静态类函数,我想把这个函数地址换成一般的类函数,不知道有没有方法,从原理上进应该走的通。

下面这个帖子说“HooK函数可以是类的成员函数,不过需要一个Pointer作为媒介”   那么ponter是怎样定义呢。
http://topic.csdn.net/t/20020927/22/1059753.html


欢迎大家探讨。

[解决办法]
类成员函数不同于普通的函数是因为编译器为他隐含的传递了一个类的this指针,你只要有了这个指针,你就可以调用成员函数了。比如说你想把某个类A的成员函数作为hook,那么可以这么做

A * g_pA = & 某个A的实例;

LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam, LPARAM lParam)
{
g_pA-> 某个成员;
}

//set hook
m_procHook = SetWindowsHookEx(WH_SHELL, (HOOKPROC)ShellProc, hinstDLL,m_pi.dwThreadId);

这只是一个方法,基本上,只要你有你的类对象的指针或者引用,你就可以调用了。不过需要注意的是,这只是你的钩子在你自己的进程里面的情况,如果你要为其他进程里的线程设置钩子,这个方法就不适合了,因为地址空间不一样了。对于跨进程的,使用类成员函数也是可以实现的,不过这不会有什么好处,只会增加复杂性

热点排行