ReadFile Funktion

wasa

Grünschnabel
habe folgendes Problem: Will über den COM1 / RS232 ein Messgerät auslesen!
Habe ein Programm geschrieben, welches den COM1 öffnet und Daten sendet. Das Problem dabei ist, das ich nichts rauslesen kann. Mein Programm stürzt bei folgender Zeile ab:
status = ReadFile (DriverHandle, Buffer, NumBytes, &BytesRead, 0);
ist irgendwas daran falsch? Ich hoffe Ihr könnt mir helfen und danke schonmal!
THX wasa

int CCOM_PORT::Read_Comport_HS (DWORD NumBytes, void *Buffer){
DWORD BytesRead;
BOOL status;
char *ptr;

ptr=(char*)Buffer;
status = ReadFile (DriverHandle, Buffer, NumBytes, &BytesRead, 0);
ptr+=BytesRead;
*(ptr)=0x00;
return TRUE;
}

wie gesagt, öffnen und Daten senden kann ich, nur auslesen nicht!
THX
 
Ich kann mir Folgendes vorstellen:
1. Das Handle ist ungültig
2. Der Lesebuffer ist von dir zu klein gewählt, bzw. NumBytes stimmt nicht mit der Grösse deines Buffers überein.
3. Der Buffer existiert überhaupt nicht.
Prüf doch die drei Sachen am Beginn der Routine -- vielleicht wird ja was Falsches übergeben.
 
ReadFile

tagchen!

Danke erstmal!
Ich sollte vielleicht dazu sagen, dass ich Anfänger bin und jetzt nicht so richtig weiß, wie ich das überprüfe!
THX wasa
 
Zum Beipiel so:
Code:
if ( Zeiger == UngültigerWert ) 
{
  printf( "Panik! Zeiger ist ungültig!" );
  return 0;
}

Wer alloziert denn den Buffer, der da übergeben wird? Oder ist genau das das Problem?
 
Guten Morgen!

Habe herausgefunden warum das nicht ging.
Es wird bei der Übertragung zwischen Edngerät und PC kein RTS HANDSHAKE vereinbart, diesen hatte ich aber in meinem programm angegeben. Nun habe ich diesen auskommentiert und schon kann ich den com auslesen, also die readfile funktion ausführen.
Nun habe ich aber ein weiteres Problem: Ich bekommen immer den gleichen String übergeben. Die länge ist in Ordnung aber der Inhalt ist immer der gleiche mit dem ich leider nichts anfangen kann

Ich hoffe ihr könnt mir sagen warum das so ist, bzw. was ich noch beachten muss!
Auf jedenfall Danke ich schonmal
cu wasa
 
wasa hat gesagt.:
int CCOM_PORT::Read_Comport_HS (DWORD NumBytes, void *Buffer){
DWORD BytesRead;
BOOL status;
char *ptr;

ptr=(char*)Buffer;
status = ReadFile (DriverHandle, Buffer, NumBytes, &BytesRead, 0);
ptr+=BytesRead;
*(ptr)=0x00;
return TRUE;
}

wie gesagt, öffnen und Daten senden kann ich, nur auslesen nicht!
THX

Hi
Du solltest in Deiner Funktion Read_Comport_HS() als Returnwert die Anzahl der gelesen Zeichen zurückgeben, sonst weiß die aufrufende Stele ja nicht, ob und viel gelesen wurde
ReadFile liest binär, das heißt, es hängt auch kein NUL-Byte als Endemarkierung für einen String an

Gleicher Pufferinhalt kann evtl. daran liegen, dass die Funktion auch zurüpckkommt, wenn keine Zeichen vorliegen. Dann ist Dein Puffer so, wie Du ihn übergeben hast.
 

Neue Beiträge

Zurück