我用vc写了一个小程序,用来接收串口的数据,是这样做的
1:m_hComm = CreateFile(m_strPort, GENERIC_READ|GENERIC_WRITE, 
0, 
NULL, 
OPEN_EXISTING, 
FILE_FLAG_OVERLAPPED, 
0);//创建一个串口文件
2:SetupComm(m_hComm, 4096, 1024))//设置缓冲
3:DCB dcb;
if(1 == nReturnValue)
{//配置DCB结构,初始化端口
if(FALSE == GetCommState(m_hComm, &dcb))
{//获得DCBshibai
AfxMessageBox("获得DCBshibai");
nReturnValue = -4;
}
}
if(1 == nReturnValue)
{
dcb.BaudRate = 9600;//波特率
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;//串口标准设置
if(FALSE == SetCommState(m_hComm, &dcb))
{//设置DCB失败
AfxMessageBox("设置DCB失败");
nReturnValue = -5;
}
}
4://接受
BOOL bRx = FALSE;
OVERLAPPED over;
BYTE buf[4096];
memset(buf,0,4096);
DWORD dwRxlen = 0;
while(dwRxlen!=2048)



bRx = ReadFile(m_hComm,&buf,1,&dwRxlen,&over);
我每一步都有检测,而且提示我串口初始化成功,可第4步接受的时候就是收不到,请大侠救命呀!我都快着急死了

解决方案 »

  1.   

    OVERLAPPED over;
    这个结构里有一个事件,你怎么不创建呢?
      

  2.   

    应该用ReadFileEx吧,使用异步操作
      

  3.   

    你应该初始化OVERLAPPED 结构:
    memset(&over, 0, sizeof(OVERLAPPED));
    over.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    然后用一个线程等待over.hEvent有信号,这时ReadFile才真正完成。或者用ReadFileEx,写一个FileIOCompletionRoutine形式的CallBack得到完成通知。
      

  4.   

    tongyi  In355Hz(好象一条狗)
      

  5.   

    bRx = ReadFile(m_hComm,&buf,1,&dwRxlen,NULL);