我想从摄像头视频中获得一帧一帧的图像数据,我采用了回调函数
在FDetecDlg.h中声明LRESULT CALLBACK FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr); 
在FDetectDlg.cpp中实现LRESULT CALLBACK CFaceDetectDlg::FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr){....}
      capSetCallbackOnFrame(m_hCapWnd,FrameCallbackProc);
在编译时出现错误如下,初学VFW、MFC对回调函数不太懂,请高手指教
error C2440: 'type cast' : cannot convert from 'long (__stdcall CFaceDetectDlg::*)(struct HWND__ *,struct videohdr_tag *)' to 'void *'
        There is no context in which this conversion is possible

解决方案 »

  1.   

    在FDetecDlg.h中声明LRESULT CALLBACK FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr); 改为:LRESULT static CALLBACK FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr);  试试。如果是公司用的话,可以考虑商业的视频开发包,AnyChat,接口比较简单:[URL=http://www.anychat.cn]http://www.anychat.cn/faq/[URL]
      

  2.   

    谢谢您 那声明成static的以后,对于我想使用的全局变量unsigned char *data;(本来在FDetectDlg.h中定义的用来获取提取的帧中数据)应该怎么定义才会合理呢?
    出现错误如下:
    error C2597: illegal reference to data member 'CFaceDetectDlg::data' in a static member function
    error C2597: illegal reference to data member 'CFaceDetectDlg::data' in a static member function
    error C2109: subscript requires array or pointer type
      

  3.   

    //回调函数/////////////////////////////////////////////////////////////////////////
    LRESULT CALLBACK CFaceDetectDlg::FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
    {
     //unsigned  char *  data;
     AfxMessageBox("回调函数");
         data = lpVHdr -> lpData; // 获得视频数据首址并将数据存入data数组中以便处理 
         
     CString   mid1,info1= " "; 
     for(int   j=0;j <300;j++) 

    mid1.Format( "%d ",(int)data[j]);//你若想转换成整形就是“%d”,以此类推; 
    info1+=(" "+mid1); 
    }
    AfxMessageBox(info1); return  (LRESULT) TRUE;
    }
    为什么我写的这个回调函数根本就没有执行呢?急 帮忙