Vc 中回调函数简要说明
如:
void CALLBACK OnProcessData);
函数申明中加上CALLBACK就表示该函数为回调函数。
凡是由你设计却由windows系统呼叫的函数,统称为callback函数。
但这么说又对回调的理解局限了些。
回调函数和普通函数没什么区别,只是使用上的区别。
回调是一种解决问题的实现方式或方法。
举个例子,
static void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
定时器可以通过回调函数实现。定时器启动后,由系统决定什么时候执行定时的操作TimerProc,但TimerProc执行的内容由你来定。
你只需将系统需要定时调用的TimerProc的地址告诉系统即可。
SetTimer(NULL,1,200,TimerProc);
TimerProc 就是一个用来回调的函数。
回调就是通过传递函数指针的方式让不关心或不知道函数实现的一方执行函数的方法。
这是一种系统设计的需要。
回调可以解决消息通知问题,可以降低两实体间的耦合度等。
如果功能提供者的某个方法只有功能使用者知道的话,可以使用回调方法将两者分离,没别要为此捆绑在一起。当然不时唯一的方法。
回调函数和普通函数没什么区别。但回调函数声明中都有 CALLBACK 。
CALLBACK 和 WINAPI等一样都只是 _stdcall 函数调用约定的声明:
“_stdcall 按从右至左的顺序压参数入栈,由被调用者把参数弹出栈。”
之所以要_stdcall调用约束,主要是考虑到CALLBACK 和 WINAPI等调用情况是“多对一”的调用情况,比如OpenFile 这个api函数会被很多程序调用。如果所有的调用都是由调用者负责参数出栈的话,link 后的执行文件中会无谓的多出重复的执行代码。