如题,不是经过封装成类的。谢谢了~!!!

解决方案 »

  1.   

    int ReadCommBlock(HANDLE ComDev,LPSTR lpszBlock,int nMaxLength)
    {
    COMSTAT    ComStat ;
    DWORD      dwErrorFlags;
    DWORD      dwLength;

    ClearCommError(ComDev, &dwErrorFlags, &ComStat);
    dwLength = min((DWORD) nMaxLength, ComStat.cbInQue);

    if (dwLength > 0)
    if (!ReadFile(ComDev, lpszBlock,dwLength, &dwLength, NULL))
    {
    dwLength = 0 ;
    ClearCommError( ComDev, &dwErrorFlags, &ComStat ) ;
    }

    return dwLength;

    } // end of ReadCommBlock()BOOL WriteCommBlock(HANDLE ComDev,LPSTR lpByte,DWORD dwBytesToWrite)
    {
    BOOL        fWriteStat ;
    DWORD       dwBytesWritten ;
    DWORD dwErrorFlags;
    COMSTAT     ComStat;

    if (ComDev == (HANDLE)-1)
    return FALSE;
    fWriteStat = WriteFile(ComDev, lpByte, dwBytesToWrite, &dwBytesWritten, NULL);

    if (!fWriteStat)
    {
    ClearCommError(ComDev, &dwErrorFlags, &ComStat);
    return FALSE;
    }
    return TRUE;
    }
    以上是两个处理,一个是读,一个是写!
    下面是打开串口的处理!
    HANDLE OpenConnection(int nIndex)
    {
    HANDLE hComDev;
    COMMTIMEOUTS CommTimeOuts ;
    DCB dcb ;
    char       szPort[ 15 ]; BOOL bResult; wsprintf( szPort, "%s%d","\\\\.\\COM", nIndex) ;  
    hComDev = CreateFile(szPort, GENERIC_READ | GENERIC_WRITE,
             0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hComDev == (HANDLE)-1)
    {
    return hComDev;
    } bResult=SetupComm(hComDev, 4096, 4096);
    bResult=PurgeComm(hComDev,
    PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
    CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
    CommTimeOuts.ReadTotalTimeoutConstant = 0;
    CommTimeOuts.WriteTotalTimeoutMultiplier = 1000;
    CommTimeOuts.WriteTotalTimeoutConstant = 10000;
    bResult=SetCommTimeouts(hComDev, &CommTimeOuts); GetCommState(hComDev, &dcb);
    dcb.fDtrControl=DTR_CONTROL_DISABLE;
    dcb.fRtsControl=RTS_CONTROL_DISABLE;
        dcb.BaudRate = 9600;
        dcb.ByteSize = 8;
        dcb.Parity =NOPARITY;
       dcb.StopBits = ONESTOPBIT; if (!SetCommState(hComDev, &dcb))
    {
       CloseHandle(hComDev);
       hComDev = (HANDLE)-1;
    } return hComDev;
    }
      

  2.   

    用CSerialport的类方便啊,不用你自己定时查询缓冲区是否有数据……其响应的速度还是比很快的,对一般的应用足够了