初次接触回调函数--以失败告终

 数据处理平台维护中。。。

想给平台增加一个界面上显示数据处理进度的进度条,突然听到同事说可以使用回调函数,回调函数是什么?真是头一次听说,问问度娘和谷歌才大致明白函数的调用机制分为同步调用,回调,异步调用三种,平时用的最多的就是同步调用,就是最一般的函数调用,传参进去,等被调用的函数执行完之后返回;但是对于大的项目来说,一般界面和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的消息响应还没完全掌握,还在学习中。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值