deepthroat
Erfahrenes Mitglied
Der ERROR_IO_PENDING ist schon OK, der wird ja auch behandelt.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.
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 );
}