工程下載:http://www.shnenglu.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
這個簡單,當你發送數據的時候,也發送一份到觀察者.接收到數據的時候,也轉一份到觀察者。
回復