类中函数作为回调函数发现的问题

最近在做一个项目用到圆刚的视频采集卡,需要对其sdk进行二次开发,拿到帧进行处理。

按照要求,回调函数是静态函数,自己定义了回调函数,然后把demo的代码粘过来,编译,报错!!显示静态函数不能非法引用变量。

无奈,咨询技术,说”静态函数只能调用静态变量,而且想要在静态函数里面调用成员函数,就必须要对象的指针“。

这样子的:CMyDlg* pThis = (CMyDlg*)lUserData;

也就是说肯定不能直接在回调函数里实现功能了,要调用其他函数实现,

云里雾里啊,没办法,参照demo,回调函数内重新定义类指针,然后调用类的成员函数,然后在成员函数内实现。

回调函数callback内部这样:CMyDlg* pThis = (CMyDlg*)lUserData;

        pThis->ShowPIP;  //ShowPIP是实现功能的函数主体

也就是说,回调函数调用一个成员函数实现主体功能;这样改过,编译,通过了!运行,靠,闪退!!

苦想多天,也不知道怎么回事,只能百度了,这篇文章给了本人很大启发,点击打开链接,如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过,

确实是这样,感谢作者。

好了,回调函数本身肯定是静态函数,不能改,但是真正实现功能的主体函数(也就是回调函数内调用的处理函数ShowPIP)可以定义成普通的C函数,而不是类的成员函数,

进而相关的变量也就只能在源文件中定义为全局的变量。这样子:

void ShowPIP(DataType A, DataType B);//定义

void ShowPIP(DataType A, DataType B)

{

...

}//函数主体

//回调函数主体

BOOL WINAPI callback(*, *, ...)

{

    ShowPIP(A, B);  

    return TRUE;

}


编译,没错!

运行,正常!

Nice!!!

总结:回调函数调用函数时不使用成员函数,直接使用普通C函数。



发布了4 篇原创文章 · 获赞 1 · 访问量 2042

猜你喜欢

转载自blog.csdn.net/NWPUXL0513/article/details/51209221
今日推荐