串口ReadPortThread读到数据后,怎样正确显示出来?

wolfsoldier   2007-6-8 11:46 楼主
DWORD WINAPI ReadPortThread(LPVOID lpvoid)
{
BYTE Byte;
    DWORD dwCommModemStatus,
        dwBytesTransferred;
    CString tempStr;

    // Specify a set of events to be monitored for the port.
    SetCommMask (hPort, EV_RXCHAR);

WaitCommEvent (hPort, &dwCommModemStatus, 0);
if (dwCommModemStatus & EV_RXCHAR)
{
DWORD length=0;
    COMSTAT ComStat;
    DWORD dwErrorFlags;
    char *buf=NULL;
    ClearCommError(hPort,&dwErrorFlags,&ComStat);
    length=ComStat.cbInQue;
    ReadFile(hPort,buf,length,&length,NULL);

    CString temp=buf;
    MessageBox(NULL,temp,TEXT("Result"),MB_OK);
}

    // Retrieve modem control-register values.
    GetCommModemStatus (hPort, &dwCommModemStatus);   
}
则消息框里为空。
在下查到些方案,如
if(dwLength>0)

                     {

                            //从串口读取数据

                            TCHAR* buf=new TCHAR[256];

                            fReadState=ReadFile(hPort,buf,dwLength,&dwLength,NULL);
                            if(!fReadState)
                            {
                                   //不能从串口读取数据
                                   MessageBox(NULL,TEXT("Error in read from serial port"),TEXT("Read Error"),MB_OK);
                            }
                            else
                           {
                                  //把数据赋值给全局变量
                                   strInChar=buf;
                            }
                           delete[] buf;
                     }
问题抖出在类型转化、缓冲区之间数据拷贝的问题,不知道怎样解决。    各位帮帮忙看看。

回复评论 (2)

好像有类型转换函数,具体是什么忘了,自己看看书找找
点赞  2007-6-8 14:26
读出一串char,然后用mbstowcs转成WCHAR,就可以显示出来了
PDA用的是宽字符
点赞  2007-6-8 15:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复