在使用VS2010开发项目时,经常需要实现一些动态的DLL库的开发,其在开发过程中,需要dll能自动调用回调函数,实现数据传输。因此,在项目中,需要使用到函数的指针,函数的指针能很好的解决该问题。下面采用socket的通信为例。
在我们认知的socket的通信模型中,其采用cs经典模型,为了使我们的代码具有更好的可移植复用性,一般讲,socket的直接通信层进行封装成DLL,作为我们以后开发的基础类。
Client Server 设备
| ----连接------------------> | |
| < ---响应 ------------------ | <-----------建立通信----------------> |
| ----------命令-设置------> | <-----------建立获取数据类型-------> |
| <-----------响应----------- | <--------- 传输数据 --------------- |
| <-------------响应--------- | <--------- 传输数据 --------------- |
| <------------响应----------- | <--------- 传输数据 --------------- |
通信方式如上图所示,因此,采用函数指针在客户端进行回调,可实现被动传输数据的过程。
在客户端的应用中,socket的client的基类DLL保存好,定义的函数指针,并具有回调函数注册功能。在该DLL中采用一个线程,使其能更好的获取设备的数据等。在获取到数据后,按照不同的数据类型采用不同的回调函数传输,回调函数在客户端的应用中实现,即实现socket的客户端接收到服务其的数据就自动调用回调函数,在客户端中,直接根据不同的数据进行处理,不需要采用轮询获取的方式。
因该问题比较常见实用,因此,作为一个笔记记录下来,文中如有错误,请读者指正。