RS232 Kommunikation

Das habe ich zu Error Code 997 gefunden aber was bedeutet das und wie kann ich das Lösen****
Code:
System error code 997 means "Overlapped I/O operation is in progress." This error code may also display as "ERROR_IO_PENDING" or as the value 0x3E5.
Der ERROR_IO_PENDING ist schon OK, der wird ja auch behandelt.

Wenn ich mir den Code so anschaue, dann wird der Rückgabewert von WriteCommByte ja überhaupt nicht in der Schleife in CSerial::SendData() geprüft. Abgesehen davon gibt CSerial::SendData() immer TRUE zurück, was auch schon wieder Unsinn ist.

D.h. die Schleife läuft auf jeden Fall von 0 bis (size - 1) und die Methode gibt nur 0 zurück wenn du als size auch 0 übergeben hast.

Hast du denn wirklich alle Fehler in der CSerial Klasse beseitigt die hier (http://www.codeguru.com/cpp/i-n/network/serialcommunications/article.php/c2503) gefunden wurden? Oder nimm evtl. stattdessen die CSerialPort Klasse - vielleicht ist die besser.

\edit: aus den Kommentaren von http://www.codeguru.com/cpp/i-n/network/serialcommunications/article.php/c2503:

C++:
int CSerial::SendData( const char *buffer, int size )
{

  if( !m_bOpened || m_hIDComDev == NULL ) return( 0 );

  BOOL bWriteStat;
  DWORD dwBytesWritten;

  bWriteStat = WriteFile( m_hIDComDev, buffer, size, &dwBytesWritten, &m_OverlappedWrite );
  if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) ){
    if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) dwBytesWritten = 0;
    else{
      GetOverlappedResult( m_hIDComDev, &m_OverlappedWrite, &dwBytesWritten, FALSE );
      m_OverlappedWrite.Offset += dwBytesWritten;
      }
    }

  return( dwBytesWritten );
}
Gruß
 
Zurück