分类: C/C++
2008-04-23 21:41:12
介绍一个 Win32 API 串口控制 MFC 打包类
作者:
支持环境:Windows 9x、Windows ME、Windows NT、Windows2000
简介:这是一个Win32 API的打包类,对处理串口的Win32 API类进行了封装,借助这个类可以很方便地对串口进行操作。
特性:
CSerialException::CSerialException
CSerialException( DWORD dwError = 0);
参数
dwError 导致异常的错误。
注释
当创建CSerialExceptionThis对象时,此成员函数被调用。为了丢出 CSerialException,必须调用全程函数 AfxThrowSerialException。如果调用时 dwError 使用缺省值,则内部则会调用GetLastError。
CSerialException::GetErrorMessage
virtual BOOL GetErrorMessage( LPTSTR lpszError,
UINT nMaxError,
PUINT pnHelpContext
= NULL );
CString GetErrorMessage();
返回值
1) 如果函数调用成功,返回非零;否则,如果没有得到错误信息文本,则返回0。
2) 表示错误的一个 CString
参数
lpszError 接收出错信息的缓冲指针。
nMaxError 缓冲能容纳的最大字符数,包括NULL终结符。
pnHelpContext 接收帮助上下文ID的UINT的地址,不返回ID。
注释
调用此成员函数获取有关出错信息。
CSerialException::m_dwError
注释
导致异常错误。此错误值为一系统错误代码,类似WINERROR.H文件中的定义。Win32 的错误代码清单请参考Win32 SDK中的 Error Codes。
CSerialPort::CSerialPort
CSerialPort();
注释
标准 C 类构造函数。在内部将成员变量置为缺省值。
CSerialPort::~CSerialPort
virtual ~CSerialPort();
注释
标准 C 类析构函数。它确保关闭打开的通讯端口。
CSerialPort::Open
void Open( int nPort, DWORD
dwBaud = 9600, Parity parity = NoParity, BYTE
DataBits
= 8, StopBits stopbits = OneStopBit, FlowControl
fc = NoFlowControl, BOOL bOverlapped = FALSE);
throw(
CSerialException );
参数
nPort 拟打开的通讯端口。
dwBaud 使用的波特率
parity 使用的校验位。取下列枚举值:
enum Parity { EvenParity, MarkParity, NoParity, OddParity, SpaceParity };
Databits 使用的数据位。
stopbits 使用的停止位。取下列枚举值:
enum StopBits { OneStopBit, OnePointFiveStopBits, TwoStopBits };
fc 使用的流控制方法。取下列枚举值:
enum FlowControl
{
NoFlowControl, CtsRtsFlowControl, CtsDtrFlowControl, DsrRtsFlowControl, DsrDtrFlowControl, XonXoffFlowControl };
bOverlapped TRUE 以重叠模式打开端口,否则为 FALSE 表示使用阻塞调用。
注释
调用这个成员函数打开通讯端口。内部将使用CreateFile打开comm端口,然后根据函数参数的说明用SetState对各种不同的RS-232进行设置。如果出错,则会丢出一个CSerialException异常。
CSerialPort::Close
Close();
注释
必须与Open函数配对使用。关闭已经打开的通讯端口。
CSerialPort::Attach
void Attach(HANDLE hComm, BOOL bOverlapped = FALSE);
参数
hComm 打开通讯端口的SDK句柄。
bOverlapped 如果端口以重叠模式打开为 TRUE,否则为 FALSE。
注释
允许将某个CSerialPort实例捆绑到现存的SDK通讯端口句柄。该函数的行为类似于MFC中CWnd::Attach函数。
CSerialPort::Detach
HANDLE Detach();
返回值
SDK 通讯端口句柄 HANDLE.
注释
必须与 Attach 函数配对使用。该函数的行为类似于MFC中的 CWnd::Detach函数。
CSerialPort::operator HANDLE
operator HANDLE();
返回值
SDK 通讯端口句柄 HANDLE。
注释
使用此操作符获取通讯端口对应的句柄。用该句柄可以直接调用Windows APIs。
CSerialPort::IsOpen
BOOL IsOpen() const
返回值
如果通讯端口处于打开状态则返回 TRUE,否则返回 FALSE。
CSerialPort::Dump
void Dump(CDumpContext& dc) const
注释
标准的MFC诊断支持函数。
CSerialPort::Read \ ReadEx
DWORD Read(void* lpBuf, DWORD dwCount);
BOOL Read(void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped, DWORD* pBytesRead = NULL);
void ReadEx(void* lpBuf, DWORD dwCount);
throw( CSerialException );
返回值
1) 读取的字节数。
2) 如果是重叠读取全同步完成返回 TRUE ,如果此操作是异步完成,则返回 FALSE 。
参数
lpBuf 缓冲指针,从串口读取的数据将被缓冲到此地址。
dwCount 指定从串口读取的字节数。
overlapped 引用 OVERLAPPED 结构, 如果端口以重叠模式打开,则此为必须的参数。
pBytesRead 如果该值非空,则为存放所读字节数的地址。
注释
这三个函数包装了 SDK 的 ReadFile 和 ReadFileEx,第二个Read版本用于重叠模式。
CSerialPort::Write \ WriteEx
DWORD Write(const void* lpBuf, DWORD dwCount);
BOOL Write(const void* lpBuf, DWORD dwCount, OVERLAPPED& overlapped, DWORD* pBytesWritten =
NULL);
void WriteEx(const void* lpBuf, DWORD dwCount);
throw( CSerialException );
返回值
1) 所写的字节数
2) 如果为完全同步的重叠写入则为 TRUE,如果操作以异步方式完成则为FALSE。
参数
lpBuf 该指针指向要写入串口的数据缓冲。
dwCount 指定要写入串口的字节数
overlapped 引用 OVERLAPPED 结构。如果以重得叠模式打开端口,此参数是必须的。
pBytesWritten 如果该值非空,则为存放所写字节数的地址。
注释
这三个函数包装了 SDK 的 WriteFile 和 WriteFileEx,第二个Read版本用于重叠模式。
CSerialPort::TransmitChar
void TransmitChar(char cChar) const
throw( CSerialException );
注释
对TransmitCommChar SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::GetOverlappedResult
void GetOverlappedResult(OVERLAPPED& overlapped, DWORD& dwBytesTransferred, BOOL bWait)
throw( CSerialException );
注释
对GetOverlappedResult SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::CancelIo
void CancelIo()
throw( CSerialException );
注释
对CancelIo SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。注意此函数只能在NT 4 或者Windows 98 中使用。Windows 95中使用该类的1.0版本将产生错误。该问题已在CSerialPort 的1.01版本中更正。
CSerialPort::GetConfig
void GetConfig(COMMCONFIG& config)
throw( CSerialException );
注释
对GetCommConfig SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::GetDefaultConfig
static void GetDefaultConfig(int nPort, COMMCONFIG& config)
throw( CSerialException );
注释
对GetDefaultCommConfig SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::SetConfig
void SetConfig(COMMCONFIG& config)
throw( CSerialException );
注释
对SetCommConfig SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::SetDefaultConfig
static void SetDefaultConfig(int nPort, COMMCONFIG& config)
throw( CSerialException );
注释
对SetDefaultCommConfig SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::ClearBreak
void ClearBreak()
throw( CSerialException );
注释
对ClearCommBreak SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::SetBreak
void SetBreak()
throw( CSerialException );
注释
对SetCommBreak SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::ClearError
void ClearError(DWORD& dwErrors)
throw( CSerialException );
注释
对ClearCommError SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::GetStatus
void GetStatus(COMMSTAT& stat)
throw( CSerialException );
注释
对GetCommStatus SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::GetState
void GetState(DCB& dcb)
throw( CSerialException );
注释
对GetCommState SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::SetState
void SetState(DCB& dcb)
throw( CSerialException );
注释
对SetCommState SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::Escape
void Escape(DWORD dwFunc)
throw( CSerialException );
注释
对EscapeCommFunction SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::ClearDTR
void ClearDTR()
throw( CSerialException );
注释
用低于DTR行的CLRDTR常量调用 Escape 函数。
CSerialPort::ClearRTS
void ClearRTS()
throw( CSerialException );
注释
用低于RTR行的CLRRTR常量调用 Escape 函数。
CSerialPort::SetDTR
void SetDTR()
throw( CSerialException );
注释
用发出DTR行的SETDTR常量调用 Escape 函数。
CSerialPort::SetRTS
void SetRTS()
throw( CSerialException );
注释
用发出RTR行的SETRTR常量调用 Escape 函数。
CSerialPort::SetXOFF
void SetXOFF()
throw( CSerialException );
注释
使用SETXOFF常量调用 Escape 函数,该常量导致传送行为接收XOFF字符。
CSerialPort::SetXON
void SetXON()
throw( CSerialException );
注释
使用SETXON常量调用 Escape 函数,该常量导致传送行为接收XON字符。
CSerialPort::GetProperties
void GetProperties(COMMPROP& properties)
throw( CSerialException );
注释
对GetCommProperties SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::GetModemStatus
void GetModemStatus(DWORD& dwModemStatus)
throw( CSerialException );
注释
对GetCommModemStatus SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::SetTimeouts
void SetTimeouts(COMMTIMEOUTS& timeouts)
throw( CSerialException );
注释
对SetCommTimeouts SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::GetTimeouts
void GetTimeouts(COMMTIMEOUTS& timeouts)
throw( CSerialException );
注释
对GetCommTimeouts SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::Set0Timeout
void Set0Timeout()
throw( CSerialException );
注释
将发送和接收的超时配置为 0 。这样将导致写操作立即返回,读操作时不论接收缓冲等待什么数据都返回,而不是等待指定的字节数到达后返回。
CSerialPort::Set0WriteTimeout
void Set0WriteTimeout()
throw( CSerialException );
注释
将发送的超时配置为 0 。这样将导致写操作立即返回。
CSerialPort::Set0ReadTimeout
void Set0ReadTimeout()
throw( CSerialException );
注释
将接收的超时配置为 0 。这样将导致读操作不论接收缓冲等待什么数据都返回,而不是等待指定的字节数到达后返回。
CSerialPort::SetMask
void SetMask(DWORD dwMask)
throw( CSerialException );
注释
对SetCommMask SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::GetMask
void GetMask(DWORD& dwMask)
throw( CSerialException );
注释
对GetCommMask SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::WaitEvent
void WaitEvent(DWORD& dwMask)
BOOL WaitEvent(DWORD& dwMask, OVERLAPPED& overlapped)
throw( CSerialException );
返回值
如果为完全同步的重叠读操作则为 TRUE,如果操作是异步完成的则为FALSE。
注释
对WaitCommEvent SDK 函数进行简单打包。第二个为重叠版本,它会立即返回,并可在代码中手工重新设置OVERLAPPED结构 hEvent 成员以信号方式通知。具体细节请参考Win32 SDK文档。
CSerialPort::Flush
void Flush()
throw( CSerialException );
注释
对FlushFileBuffers SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::Purge
void Purge(DWORD dwFlags)
throw( CSerialException );
注释
对PurgeComm SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::TerminateOutstandingWrites
void TerminateOutstandingWrites()
throw( CSerialException );
注释
用 PURGE_TXABORT 常量调用 Purge 函数,该常量终止所有将要进行的写操作并立即返回,即便是正在进行的还没有完成的写操作。
CSerialPort::TerminateOutstandingReads
void TerminateOutstandingReads()
throw( CSerialException );
注释
用 PURGE_TXABORT 常量调用 Purge 函数,该常量终止所有将要进行的读操作并立即返回,即便是正在进行的还没有完成的读操作。
CSerialPort::ClearWriteBuffer
void ClearWriteBuffer()
throw( CSerialException );
注释
用 PURGE_TXCLEAR 常量调用 Purge 函数,该常量清除输出缓冲(如果设备驱动程序有一个这样的缓冲的话)。
CSerialPort::ClearReadBuffer
void ClearReadBuffer()
throw( CSerialException );
注释
用 PURGE_RXCLEAR 常量调用 Purge 函数,该常量清除输入缓冲(如果设备驱动程序有一个这样的缓冲的话)。
CSerialPort::Setup
void Setup(DWORD dwInQueue, DWORD dwOutQueue)
throw( CSerialException );
注释
对SetupComm SDK 函数进行简单打包。具体细节请参考Win32 SDK文档。
CSerialPort::OnCompletion
virtual void OnCompletion(DWORD dwErrorCode, DWORD dwCount, LPOVERLAPPED lpOverlapped);
throw( CSerialException );
参数
dwErrorCode
指定I/O完成状态。该参数可为下列值之一:
值 |
意义 |
0 |
I/O 成功 |
ERROR_HANDLE_EOF |
ReadFileEx 函数试图读到文件尾。 |
dwCount 指定传输的字节数。如果发生错误,则此参数为 0。
lpOverlapped OVERLAPPED 结构指针,由异步I/O函数指定。
注释
当任何WriteEx 或 ReadEx异步调用例程完成时,该函数被调用。在CSerialPort派生类中,该写此函数用自己特定的代码来反映异步调用完成时的行为。注意在对为 lpOverlapped 参数分配的内存进行清除处理时不要忘记调用此函数的父类版本CSerialPort::OnCompletion。
CSerialPort::BytesWaiting
DWORD BytesWaiting();
throw( CSerialException );
返回值
等待从串口读取的字节数。
注释
该函数返回等待从串口读取的字节数。
CSerialPort::DataWaiting
BOOL DataWaiting(DWORD dwTimeout);
throw( CSerialException );
参数
dwTimeout 在确定数据是否到达时,指定一个等待超时的毫秒值。
返回值
如果在指定的超时间隔内数据到达则为 TRUE,否则为 FALSE.。
注释
该函数等待指定的间隔检查数据是否到达串口。
作者的联系方式: