功能: 从字面上的意思看来 , 它是用来清除错误情况用的 , 但是实际上它还可以拿来取得目前通讯设备的一些信息 .
函数原型:
BOOL ClearCommError (
HANDLE hFile, // handle to communications device
LPDWORD lpErrors, // pointer to variable to receive error codes
LPCOMSTAT lpStat // pointer to buffer for communications status
) ;
说明:
在调用 ReadFile 和 WriteFile 之前,线程应该调用 ClearCommError 函数清除错误标志。
该函数负责报告指定的错误和设备的当前状态。
7CloseHandle();
功能:关闭串口
BOOL CloseHandle ( HANDLE hObject // handle to object to close )
下面是我在 bcb 里的一些具体实现:
1. 打开串口
void __fastcall TForm1::Button1Click(TObject *Sender) {
hCom=CreateFile( \文件名
GENERIC_READ|GENERIC_WRITE,// 访问模式允许读写
0, // 此项必须是 0
0,// 无安全参数
OPEN_EXISTING,// 创建方式
FILE_FLAG_OVERLAPPED,// 异步工作方式
0);
if (hCom==INVALID_HANDLE_VALUE)
{
ShowMessage(\
CloseHandle(hCom);
hCom = 0;
return;
}
else ShowMessage(\
Button1->Enabled=false;
CheckBox1->Enabled=true;
CheckBox2->Enabled=true;
CheckBox3->Enabled=true;
CheckBox4->Enabled=true;
CheckBox5->Enabled=true;
if(!GetCommState(hCom,&dcb)) // 获得串口设置并用它填充 dcb 结构体
ShowMessage(\
if (!SetupComm(hCom,1024,1024)) // 设置输入输出缓冲区大小
ShowMessage(\
dcb.BaudRate=9600;
dcb.fParity=0;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
dcb.ByteSize=8;
if(!SetCommState(hCom,&dcb)) // 重新配置串口
ShowMessage(\
SetCommMask(hCom,EV_TXEMPTY); //EV_RXCHAR|
memset(&os,0,sizeof(OVERLAPPED));
os.hEvent=CreateEvent(NULL,true,false,NULL); }