工程下载:http://www.cppblog.com/Files/richardzeng/C++中实现串口操作类%20SerialPortLib.rar
最近封装了一个串口类,与大家分享,该类的主要特点是:能实现数据的异步接收;无须MFC的支持;只能在VS2003编译通过,但只要做少量修改就可以在VC6.0中使用.使用起来非常简单,主要代码如下:
1 #include "stdafx.h"
2 #include "comm_exception.h"
3 #include "SerialPort.h"
4 #include "serialportobservertest.h"
5
6 using namespace C2217::StdLib;
7 using namespace IBMS;
8
9 int _tmain(int argc, _TCHAR* argv[])
10 {
11 try
12 {
13 //声明一个串口观察者
14 CSerialPortObserverTest portObserver;
15 //声明串口1
16 CSerialPort port(1);
17 //注册串口的观察者
18 port.AtachPortObserver(&portObserver);
19 //打开串口
20 port.Open();
21 byte data[100] = {0};
22
23 port.Send(data,sizeof(data));
24 }
25 catch(comm_exception &e)
26 {
27 SET_CATCH_POS(e);
28 std::cout << e;
29 }
30
31 return 0;
32 }
33
串口数据的接收在
void CSerialPortObserverTest::OnSerialPortReceive(CSerialPort *pSerialPort, byte *pData, size_t nDataLen)
{
cout << pSerialPort->GetName().c_str() << "Received Data: "<<endl;
for(size_t i=0; i< nDataLen ;++i )
{
cout << pData[i] << " " ;
}
cout <<endl;
}
完成,你也可以不使用观察者,直接重写void CSerialPort::OnReceiveData(byte *pData, size_t nDataLen)可以获得更好的执行效率。去掉观察者对象list.
有什么问题邮件联系:dyj057@gmail.com
# re: C++中实现串口操作类 2005-12-22 18:34
我看你的程序使用了一个叫IbmsSerialPort.dll的dll来完成通讯
而这个IbmsSerialPort.dll首先使用CreateFile,然后使用GetCommState等等一系列communications resource function来完成端口通讯
ok,学到了一些东西
回复
# re: C++中实现串口操作类 2006-03-01 10:44
CreateFile对串口操作是独占的,其他的应用程序就不能打开,怎么实现观察者的角色呢?想请教楼主!msn:a.zlp@163.com
回复
# re: C++中实现串口操作类
2006-03-01 12:00
这个简单,当你发送数据的时候,也发送一份到观察者.接收到数据的时候,也转一份到观察者。
回复