欢迎来到天天文库
浏览记录
ID:14187121
大小:104.50 KB
页数:14页
时间:2018-07-26
《深入浅出vc++串口编程之第三方类》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、深入浅出VC++串口编程之第三方类串口类从本系列文章可以看出,与通过WIN32API进行串口访问相比,通过MScomm这个Activex控件进行串口访问要来的方便许多,它基本上可以向用户屏蔽多线程的细节,以事件(发出OnComm消息)方式实现串口的异步访问。尽管如此,MScomm控件的使用仍有诸多不便,譬如其发送和接收数据都要进行VARIANT类型对象与字符串的转化等。因此,国内外许多优秀的程序员自己编写了一些串口类,使用这些类,我们将可以更方便的操作串口。在笔者的《深入浅出Win32多线程程序设计之综合实例》(网址:http://dev.
2、yesky.com)一文中,曾向读者展示了由RemonSpekreijse编写的CSerialPort串口类,而本文将向您展示由程序员llbird编写的cnComm(中国串口?)串口类。llbird是一位优秀的程序员,他的代码风格简洁而紧凑,类的声明和实现都被定义在一个头文件中,使用这个类的朋友只需要在工程中包含这一头文件即可:/*CommBaseLibrary(WIN98/NT/2000)ver1.1Compileby:BC++5;C++BUILDER4,5,6,X;VC++5,6;VC.NET;GCC;copyright(c)2004.
3、5-2005.8llbirdwushaojian@21cn.com*/#ifndef_CN_COMM_H_#define_CN_COMM_H_#pragmawarning(disable:4530)#pragmawarning(disable:4786)#pragmawarning(disable:4800)#include#include#include//送到窗口的消息WPARAM端口号#defineON_COM_RECEIVEWM_USER+618#defineON_COM_
4、CTSWM_USER+619//LPARAM1valid#defineON_COM_DSRWM_USER+621//LPARAM1valid#defineON_COM_RINGWM_USER+623#defineON_COM_RLSDWM_USER+624#defineON_COM_BREAKWM_USER+625#defineON_COM_TXEMPTYWM_USER+626#defineON_COM_ERRORWM_USER+627//LPARAMsaveErrorID#defineDEFAULT_COM_MASK_EVENTEV_RX
5、CHAR
6、EV_ERR
7、EV_CTS
8、EV_DSR
9、EV_BREAK
10、EV_TXEMPTY
11、EV_RING
12、EV_RLSDclasscnComm{ public: //------------------------------Construction----------------------------------- //第1个参数为是否在打开串口时启动监视线程,第2个参数为IO方式阻塞方式(0)/异步重叠方式(默认) cnComm(boolfAutoBeginThread=true,DWORDdwIOMode=FILE_FLAG_OV
13、ERLAPPED):_dwIOMode(dwIOMode),_fAutoBeginThread(fAutoBeginThread) { Init(); } virtual~cnComm() { Close(); UnInit(); } //----------------------------------Attributes---------------------------------- //判断串口是否打开 inlineboolIsOpen() { return_hCommHandle!=INVALID_HANDLE_VAL
14、UE; } //判断串口是否打开 operatorbool() { return_hCommHandle!=INVALID_HANDLE_VALUE; } //获得串口句炳 inlineHANDLEGetHandle() { return_hCommHandle; } //获得串口句炳 operatorHANDLE() { return_hCommHandle; } //获得串口参数DCB DCB*GetState() { returnIsOpen()&&::GetCommState(_hCommHandle,&_DCB)==TRU
15、E? &_DCB:NULL; } //设置串口参数DCB boolSetState(DCB*pdcb=NULL) { returnIsOpen()?::SetCommStat
此文档下载收益归作者所有