我曾经看到挂钩程序的Dll中有这样一个函数
bool installhook(DWORD thread_id)
{
.......
}在客户端,为了调用这个函数,在将DLL装入以后,他使用了函数指针来进行操作,上面是这样的。typedef bool (*inshook)(DWORD);
inshook installhook;//对应installhook的函数指针后面的程序就开始用到这个函数指针调用DLL中的函数了
installhook(THIREAD_ID);THIREAD_ID为某个线程的ID谁能告述我啊?

解决方案 »

  1.   

    可以把这里函数指针理解为类型
    就好像typedef int myint;
    这样就可以用myint来定义变量了
    myint i; //实际i就是int类型
    函数指针同样typedef bool (*inshook)(DWORD);
    就是定义inshook为一个函数指针,是一个什么类型的指针呢?是一个返回值为bool,参数为DWORD的函数。这样inshook就可以作为一种函数类型(如同简单类型int,float,bool一样),用来定义函数了:
    inshook installhook; //定义installhook为一个inshook类型函数所以后面就可以使用这个函数了,就像使用变量i一样
      

  2.   

    inshook installhook;//用于声明installhook的原型,表示inatallhook是个指定类型函数.
    很奇怪的语法,一般情况下是:
    extern "C" __declspec(dllexport) bool installhook(DWORD);如果是指针,用法好像该是:
    (*installhook)(THREAD_ID);
      

  3.   

    typedef bool (*inshook)(DWORD);
    意思是新生成一个类型,类型名为inshook(以后直接使用这个名称声明变量)
    这个新类型是一个指针,而这个指针指向一个函数,
    而这个函数又具有如下特征,返回值bool类型,需要一个参数,参数类型为DWORD
      

  4.   

    谢谢你,sutra(只回答经典问题 只提供经典答案) 但是看到书上用的是
    installhook(THREAD_ID);这样来调用函数,我不太明白,而且我试过,这样可以得到正确的结果,为什么啊?