两台计算机串口通信,收发英文字符正常,中文字符乱码?
代码如下:
void __fastcall TForm1::bStateClick(TObject *Sender)
{
char *ComNo;
DCB dcb;
AnsiString Temp;
Temp = "COM" + IntToStr(SecCom->ItemIndex+1);
ComNo = Temp.c_str();//获取端口字符串的首地址
hComm = CreateFile(ComNo, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0,0);
if(hComm == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, "端口打开失败", "ComError", MB_OK);
return;
}
GetCommState(hComm, &dcb);
dcb.BaudRate = CBR_9600;//波特率为9600
dcb.ByteSize = 8;//数据位数
dcb.Parity = NOPARITY;//奇偶校验位
dcb.StopBits = ONESTOPBIT;//停止位
if(!GetCommState(hComm,&dcb)) //如果调用串口状态失败
{
MessageBox(NULL, "获取串口状态失败", "StateError", MB_OK);
CloseHandle(hComm);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::bQuitClick(TObject *Sender)
{
if(hComm != INVALID_HANDLE_VALUE) //如果端口未关闭
{
CloseHandle(hComm);
}
exit(EXIT_SUCCESS);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::bSendClick(TObject *Sender)
{
//发送数据
char *Data;//定义发送数据指针
unsigned long ln;//发送数据的长度
unsigned long AllOfln; //定义发送数据总字节数
AnsiString SendTemp;//定义发送字符串变量
if(hComm == 0) return;
SendTemp = SendData->Text;//发送字符串赋值
Data = SendTemp.c_str();//获取发送数据指针
ln = SendTemp.Length();//获取发送数据的长度
WriteFile(hComm, Data, ln, &AllOfln, NULL); //发送数据
}
//---------------------------------------------------------------------------
void __fastcall TForm1::bRceiveClick(TObject *Sender)
{
//接收数据
char inbuff[1024];//定义接收数据缓冲区的地址
DWORD dwError, lrc;//定义接收错误代码变量的指针
COMSTAT cs;//定义通信状态缓冲区指针
ClearCommError(hComm, &dwError, &cs); //读取串行端口现在的状态
if(cs.cbInQue > sizeof(inbuff))
{
PurgeComm(hComm, PURGE_RXCLEAR);
return;
}
ReadFile(hComm, inbuff, cs.cbInQue, &lrc, NULL);//接收数据
inbuff[cs.cbInQue] = '\0';
ReciveData ->Text = inbuff; //将接收数据显示在Memo1上
}
//---------------------------------------------------------------------------