首先声明: 本人对于回调函数的概念理解得不深...但既然回调函数实际上就是在调用某个函数时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。那就是一种函数指针的应用...一般的普通函数,也可以在调用某函数时将自已的
函数指针传给被调用函数啊...我想问的是:为何还要专门用CALLBACK 来声明一个回调函数呢, 函数被声明为CALLBACK后,是不是系统的处理方法与
普通函数有什么不一样的呢  ? 我感觉好像回调函数与普通的函数没什么区别.......请高手解解惑..........

解决方案 »

  1.   

    如果声明称CALLBACK,那时pascal的调用方式,函数执行完时被调用函数自己清除传入参数的栈空间
    如果是c的调用方式,函数执行完时调用函数负责清除传入参数的栈空间回调函数一般是由系统调用的,所以要自己负责清除栈空间
      

  2.   

    回调函数是由操作系统来调用的函数,我们一般用SetTimer()函数,或多线程编程中将回调函数作为参数,当每触发一次时钟事件,或启动一个线程时,操用系统就会调用它。
    它和一般函数的区别除了上面的老兄说的外,还一点很重要的是,申明回调函数时一定要将它申明为全局函数或类函数,而不能申明为对象函数。
    这是因为操用系统调用它时,不通过对象来调用它,而对象函数在编译时,会在函数的参数表的末尾插入this指针。这样你申明为对象函数,而让操用系统调用时,操作系统发现多出一个参数,而致使程序运行失败。
      

  3.   

    回复楼上:
    <<还一点很重要的是,申明回调函数时一定要将它申明为全局函数或类函数,而不能申明为对象函数。
    >>不点不解,,,你说的对象函数是什么函数,,,与类函数有何区别............
      

  4.   

    当我建一个类时,里面有一个函数:
    class A
    {
      public:
         int getage();
    }
    如果我们要调用这个函数时,必须先申明一个对象,通过对象名来使用
    A a;
    a.getage();
    那么我们称这个函数为对象函数。
    如果我们申明为:
    class A
    {
      public:
        static int getage();
    }
    那我们使用时不用事先申明对象
    A::getage();
    那么我们就称之为静态函数或类函数
    回调函数就是让操作系统调用的函数,
    其形不局限于int CALLBACK WinMain(.......)
    当我们用SetTimer(.....)AfxBeginThread(.....)时,将函数指针作参数传进去,系统也会调用,那么这种函数据叫回调函数
      

  5.   

    CALLBACK 是不一样的,你可以看看它的定义