回调函数,就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就  
是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可  
以在回调函数里完成你要做的事。  
 
capVideoStreamCallback  这个回调函数,我没有做过,看了一下Help,应该是通过发送消息  
WM_CAP_SET_CALLBACK_VIDEOSTREAM,来设置的,或者调用宏capSetCallbackOnVideoStream  
来完成的。这样设定之后,系统在进行图像捕捉的过程中,就会自动调用你写的回调函数。  
 
这个回调函数的函数体需要你自已来写,然后在另一函数中调用,即是说:  
LRESULT  CALLBACK  capVideoStreamCallback(HWND  hWnd,LPVIDEOHDR  lpVHdr)  
{  
 ........  
}  
//在另一函数中调用它(即以capVideoStreamCallback的地址作为一参数)  
Function(1,......,capVideoStreamCallback,.....);  
这就好像我们用定时器一样,在设置定时器时需要为定时器设置一回调函数:  
::SetTimer(m_hWnd,1,1000,(TIMERPROC)TMProc);这里的TMProc就是回调函数  
 
 
模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让A作出相应反应。  
       那么我们就把foo称为回调函数。  
 
       “这个回调函数不是VFW.h中声明的么,“  
       ----那是声明了回调函数原型,是告诉你传递进来的回调函数必须和它定义的原型保持一致。  
 
       ”为什么要自己写函数体呢?“  
       ----比如在上面模块B里面,它只知道当event发生时,向模块A发出通知,具体怎么回应这个事件,不是B所关心的,也不是B所能预料到的。  
       你站在A的角度上思考,当然要你自己作出对event的反应,也就是你要自己写函数体。  
 
       你如果明白了C++里面的函数指针,就很容易理解回调函数了。  
 
"不知道系统调用后有什么结果,或者我怎么利用这个结果啊"  
---如果你向系统传递一个回调函数地址,那么你的程序就相当于上面我说的模块A,系统就相当于模块B,系统只是调用你的函数,它根本不可能知道会有什么结果。  
     你怎么利用这个结果,看你是怎么定义这个回调函数的。              
回调函数和回调机制是不同的概念,。,,函数是被调用的,但是回调机制在不同的语言中不都是以函数指针来实现的。。。。比如c#...一般的在windows  api  中,会调都是使用函数指针实现的。。。