数据处理平台维护中。。。
想给平台增加一个界面上显示数据处理进度的进度条,突然听到同事说可以使用回调函数,回调函数是什么?真是头一次听说,问问度娘和谷歌才大致明白函数的调用机制分为同步调用,回调,异步调用三种,平时用的最多的就是同步调用,就是最一般的函数调用,传参进去,等被调用的函数执行完之后返回;但是对于大的项目来说,一般界面和DLL都是分开的模块,许多时候用户想通过界面知道软件运行到哪里了,通过回调函数实现就可以解决;至于异步调用,暂时还用不到,所以就不在这里赘述了;
在界面的工程里定义回调函数void __stdcall FlushUI(int i,CStirng strPath){ /*实现回调函数*/};据说这个函数必须是全局的,在网上查查,好多文章是这么说的,至少我把他定义成类的成员函数,编译会出错;如果非要定义成类的成员函数,必须定义为static
在DLL中声明一下这个函数 typedef void (__stdcall *pFun)( int,CString ),参数类型和FlushUI的一样。。。
在DLL中的相关的类中定义一个成员变量:pFun m_gCallBack
在DLL中的相关类中声明函数 RecordFun(pFun objFun),参数是回调函数
调用:界面上调用RecordFun( FlushUI )将回调函数的地址传入DLL中接受,在DLL中需要记录进度的函数中 使用 m_gCallBack( 0,strPath )调用回调函数的,这样就可以使用回调函数了,实验一成功;开始实际操作
不过事实上我是没做成功,因为之前的那个界面不是我做的,之前的代码中是将LogView封装成一个类,显示Log很简单,但是封装好了,而且涉及到其他很多类,这个改动起来比较大,花的时间也比较长,所以就此罢手,也没太多时间修改;就是对Windows的消息响应还没完全掌握,还在学习中。。。