我对回调函数的概念很模糊。回调函数在定义时只不过采用了CALLBACK(即__stdcall)的调用方式,其他并没有特殊之处。普通函数不是也可以采取--stdcall这种调用方式么。回调函数的概念和C++书籍中讲到的函数指针作为另一个函数的参数的概念是不是一回事?如果是的话,那不是任何函数都可以是回调函数了,普通函数和回调函数没有了任何区别?如果把回调函数A的指针传给另一个函数B,那么是不是当执行函数B时才调用回调函数A,而出了B的范围就不会调用A了?回调函数A是谁调用的,是函数B还是操作系统?我们可以自己调用回调函数吗?如果回调函数是被操作系统随时调用的,那么如果在控制台程序中使用了回调函数,则程序流向就是不可知的,因为程序流向可能随时被中断转而去执行回调函数,是这样吗?

解决方案 »

  1.   

    是不是编译器碰到CALLBACK会做特殊处理???
      

  2.   

    没有任何特殊处理.CALLBACK是MS的#define.而回调函数则是C/C++语言的成份.写不写CALLBACK不是判定是否是回调函数的充要条件.kenryHuang说得不错.
    普通情况下,都是你调库函数,库函数是在你的程序出成前就生成.如果库函数要调你的函数,看上去是不可能的,因为你的程序在库函数被编译时还没有出生呢. 但库函数可以通过接受一个函数指针的方针,先假定你会提供这个函数,来实现它的处理.这样的情况下,你后来写的那个函数就是回调函数.
      

  3.   

    在Windows中,应用程序通过要求Windows完成指定操作,而承担这项通信任务的API函数就是Windows的相应窗口函数WndProc。应用程序不直接调用任何窗口函数,而是等待Windows调用窗口函数,请求完成任务或返回信息。为保证Windows调用这个窗口函数,这个函数必须先向Windows登记,然后在Windows实施相应操作时回调,所以窗口函数又称为回调函数。WndProc是一个主回调函数,Windows至少有一个回调函数。典型的回调函数有窗口过程、对话框过程和钩子函数。实际上,也许有不止一个的窗口过程。例如,每一个不同的窗口类都有一个与之相对应的窗口过程。回调函数是系统管的~
      

  4.   

    回调函数可以看做是系统(操作系统 or 别的一个大系统)给你留下的
    一个接口,你利用这个接口来做你的事。比如,假设系统实现了一个功能:
    [按下鼠标左键,弹出一个对话框,显示一个名字]
    它用到一个叫GetName的函数,返回一个名字,但自己不写这个函数。
    你就可以自己编一个GetName函数。
    按下鼠标左键,系统先做一些事,执行到GetName,进入你的函数执行,
    函数执行完后,系统再做另一些事,最后达到功能要求。
    这个时候,显示的名字,就是你在GetName中得到的。