用callback申明为全局或静态的函数,它是用来给系统调用的.

解决方案 »

  1.   

    就是自己定义的,但由系统来调用的函数,如
    LRESULT CALLBACK WindowProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)自己并不知道什么时候调用它,系统决定的。
      

  2.   

     vcbear(一只平凡无知的熊) (2001-8-21 15:57:08)  得0分 认为回调函数只是由系统调用或者由"DLL调用"完全是一种误导的说法。
     
    回复人: zj_ok(zj_ok) (2001-8-21 15:59:21)  得0分 
    回调一般不显示的调用,当某个事件被触发时,由系统来调用,例如写一个键盘钩子,用一个回调函数来处理键盘事件,挂上钩子后,当有键按下,就由系统来调用此函数  
    回复人: vcbear(一只平凡无知的熊) (2001-8-21 16:07:18)  得0分 
    回调函数只是声明了一段函数,并且把指针交给可能的调用者,由调用者通过函数指针进行函数调用。
    这个调用者可能是系统的某些过程,可能是窗口过程,可能是任何可以在该进程空间访问该段函数的任何代码。
    由于windows系统的很多例程是写成dll,而且在windows编程中,系统自带的DLL给出很多回调函数的接口,所以,会有回调函数是“系统调用”或“dll/窗口调用”等一些说法,这是非常不全面的。在进程空间内,任何代码都可以访问任何指针地址,系统dll影射到你的进程空间后,在这方面跟你自己的代码没有任何区别。你完全可以写一段函数,声明一个函数指针,然后把该指针交给你的另一个函数,让它调用,然后你可以说:这就是回调函数!另外,windows编程只所以声明CALLBACK这个实际上是FAR PASCAL或者_stdcall的宏,是因为windows本身函数调用需要遵循c语言的函数调用的一些标准,要求你声明给系统调用的函数时,是相应的类型,干脆以CALLBACK宏代替,不会错。
     
    回复人: 严黎斌() (2001-8-21 16:14:10)  得0分 
    vcbear说得对。
    我就编写过这样的应用,一个负责串口通信的dll,其中对接收到字符的处理,使用回调机制,调用主程序的函数。
     
    回复人: vcbear(一只平凡无知的熊) (2001-8-21 16:22:50)  得0分 
    也可以参考
    http://www.csdn.net/develop/read_article.asp?id=6535
    轻松使用自己的回调函数回调函数的本质就是C语言里基本的“函数指针”的应用,如果实在无法理解,不妨先温习一下C语言书。
     
      

  3.   

    to vcbear(一只平凡无知的熊) 
    你的回答令我满意,我给你了20分!!!
    希望下你能再帮我的忙!!
    谢谢