0

シリアルポートに文字を書き込んでいます(HWハンドシェイクなし、オーバーラップなし)。数回ハンドシェイク文字(ACK)をポートに送信すると、writefileはtrueを返しますが、送信されたバイトは1ではなく0なので、writefileする必要がありますまた。Getlasterror は常に 0 を返します。2 回目は問題ありません。私は何かが間違っていると仮定していますが、それが何であるかはわかりません。プログラムの一部を以下に示します。

ありがとう

swprintf( portName, sizeof( portName ) / sizeof(TCHAR), _T("\\\\.\\COM%i"), comPort); 
port = CreateFile(portName, GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
DCB dcb;            
ZeroMemory(&dcb, sizeof(dcb));
dcb.DCBlength = sizeof(DCB);
if ( GetCommState(port, &dcb) )
{
   dcb.BaudRate = CBR_9600;     
   dcb.ByteSize = 8;      
   dcb.Parity = NOPARITY;
   dcb.StopBits = ONESTOPBIT;
   dcb.fAbortOnError = TRUE;
   if (SetCommState(port, &dcb))
   {
    errlog(-1,"GetCommState failed with error %d.\n", GetLastError());  
    exit();
   }

while (1)
{
    DWORD bytes2write=1;
    DWORD bytes_written = 0;
    ClearCommError(port,NULL,NULL);
    BOOL w=WriteFile(port,chrs,bytes2write,&bytes_written,NULL);
    if (!w || bytes_written!=bytes2write)
    {
        DWORD err = GetLastError();
        if (err==0L)
            continue;   
        ...
    }
}

}

4

0 に答える 0