我在看《Inside--VCL》时看到使CALLBACK来定义将回调函数会加快回调函数的执行效率。书上说CALLBACK被定义为FAR PASCAL,代表一个使用长指针,Pascal调用惯例的函数。不是很理解,哪位大侠能给解释一下。

解决方案 »

  1.   

    《Inside--VCL》我还没买到,可惜!
      

  2.   

    回调函数也就是由操作系统调用的函数,即就是一个函数获得另一个函数的地址,然后调用这个函数,也就是说,函数不是由本程序调用的,而是由另一个封装在WIN API函数中的函数调用的
    一般在高级WINDOWS SDK编程序的时候会用到!你需要形式上声明一个WINDOWS所要求的函数,然后把函数的地址传给WINDOWS,也就是让WINDOWS知道你需要执行的指令的地址,当某种特定的情况下,WINDOWS会调用你写的这个函数!从而使你获得控制权.例如:
    HHOOK SetWindowsHookEx(
        int idHook, // type of hook to install
        HOOKPROC lpfn, // address of hook procedure <--此处就要求给出一个回调函数的地址给OS;
        HINSTANCE hMod, // handle of application instance
        DWORD dwThreadId  // identity of thread to install hook for 
       );
    这个API函数允许程序员监视一些特定的系统事件!
      

  3.   

    回调函数一般不会被显示的调用,它是在符合某种条件时被操作系统调用的,一般有一个注册
    函数。注册函数相当于告诉操作系统:等XXXXX(来了)你就给我干这个
      

  4.   

    它作用我知道,我是想问为什么使CALLBACK来定义将回调函数会加快回调函数的执行效率,哪位达人能给出正解?
      

  5.   

    据我推测应该是,callback函数的调用方式为 far pascal ,程序编译的时候产生的机器码较少,因此效率高。为什么机器码少,可能是因为far pascal调用方式,寻址方式比较简单,对参数进行优化等原因(猜测,请高手指正)