COM funktioniert nicht auf allen Rechnern

Hallo Allerseits,

Unter MS C++ 6 haben wir mit dem Code unten die COM initialisiert. Die Übertragung von ca. 32 KB klappt auch oft, aber nicht immer. Bei Ivica zu Hause geht es unter Home XP, Multiuser überhaupt nicht.
Die Gegenstelle benutzt Xon/Xoff, die Handshakeleitungen sind an der Gegenstelle gebrückt.
Die COM wird nicht von anderen Programmen benutzt. Kabel, Anschlussbelegung und Hardware sollten ok sein, da die Kommunikation mit einem alten DOS-Programm ( das nun so langsam mal ersetzt werden soll ) funktioniert.

Wir würden uns freuen, wenn der geübte C++ Programmierer einen Blick auf unsere Zeilen wirft und uns einen Wink geben kann, an welcher Stelle es hapern könnte.

Vielen Dank für Eure Hilfe,

Uwe P.

bool CSerie::stuck_out_tongue:ortOpen(char *portnumber, long baudrate, int parity, int wordlength, int stopbits)
{
COMMTIMEOUTS g_cto =
{
5000, /* ReadIntervalTimeOut */
0, /* ReadTotalTimeOutMultiplier */
5000, /* ReadTotalTimeOutConstant */
3, /* WriteTotalTimeOutMultiplier */
1000 /* WriteTotalTimeOutConstant */
};
memset(&m_Ov,’/0’,sizeof(m_Ov));
m_hCom = CreateFile( portnumber,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL );
if ( m_hCom == INVALID_HANDLE_VALUE )
{
GetError();
return false;
}
m_dcb.DCBlength= sizeof(DCB); /* DCBlength */
m_dcb.BaudRate= 9600; /* BaudRate */

m_dcb.fBinary= TRUE; /* fBinary */
m_dcb.fParity = FALSE; /* fParity */
m_dcb.fOutxCtsFlow= FALSE; /* fOutxCtsFlow */
m_dcb.fOutxDsrFlow= FALSE; /* fOutxDsrFlow */
m_dcb.fDtrControl= DTR_CONTROL_ENABLE; /* fDtrControl */
m_dcb.fDsrSensitivity= FALSE; /* fDsrSensitivity */
m_dcb.fTXContinueOnXoff= FALSE; /* fTXContinueOnXoff */
m_dcb.fOutX= TRUE; /* fOutX */
m_dcb.fInX= TRUE; /* fInX */
m_dcb.fErrorChar= FALSE; /* fErrorChar */
m_dcb.fNull= FALSE; /* fNull */
m_dcb.fRtsControl= RTS_CONTROL_ENABLE; /* fRtsControl */
m_dcb.fAbortOnError= FALSE; /* fAbortOnError */
m_dcb.fDummy2= 0; /* fDummy2 */
m_dcb.wReserved= 0; /* wReserved */
m_dcb.XonLim= 250; /* XonLim */
m_dcb.XoffLim= 250; /* XoffLim */
m_dcb.ByteSize= 8; /* ByteSize */
m_dcb.Parity= NOPARITY; /* Parity */
m_dcb.StopBits= ONESTOPBIT; /* StopBits */
m_dcb.XonChar= 17; /* XonChar */
m_dcb.XoffChar= 19; /* XoffChar */
m_dcb.ErrorChar= 0; /* ErrorChar */
m_dcb.EofChar= 0; /* EofChar */
m_dcb.EvtChar= ‚\0‘;

/* Buffergroesse bestimmen */
SetupComm(m_hCom,4096,4096);

/* configuration port COM */
if(!SetCommTimeouts(m_hCom, &g_cto ) ||!SetCommState(m_hCom, &m_dcb))
{
// printf(„Erreur lors de la configuration du port COM%d“, nId);
AfxMessageBox(„Port nicht richtig geoeffnet“,NULL,MB_OK);
CloseHandle(m_hCom);
return FALSE;
}
/* Buffer loeschen, DTR auf 1 setzen */
PurgeComm(m_hCom, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
//EscapeCommFunction(m_hCom, SETDTR);
AfxMessageBox(„port geoeffnet“,NULL,MB_OK);

return true;
}

Funktioniert es denn auf einigen?
wir haben einige Programme, die NUR auf XP-Rechnern schwierigkeiten machen. Dabei behelfen wir uns, indem wir es über eine Verknüpfung aufrufen, und bei dieser Verknüpfung in den Kompatibiltitätsmodus win2000 (oder was immer funktioniert hat) schalten. (Eigenschaften der Verknüpfung selber.)

Gruß
achim