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语言书。