WriteFile sendet keine Daten
-
@Kuli:
Du solltest alle Felder der DCB-Struktur initialisieren, entweder mit GetCommState oder mit BuildCommDCB. Sonst stehen da zufällige Daten drin.
-
Der Fehler ist die 0 im vierten Parameter.
-
Was muss ich denn anstatt der 0 schreiben ?
Müssen ehrlich alle Felder initialisiert werden ?
-
@ flenders
Die steht eine 1 bei nNumberOfBytesToWrite weil ich ja angeben muss wieviele Bytes ich senden will (laut MSN) oder ?
Als Fehler habe ich bisher folgende bekommen
1. Das sich der Port nicht öffnen lässt und
2. falscher Parameter in der Funktionsübergabe
-
Zitat MSDN:
lpNumberOfBytesWritten (Der 4. Parameter):
[out] Pointer to the variable that receives the number of bytes written. WriteFile sets this value to zero before doing any work or error checking.
If lpOverlapped is NULL, lpNumberOfBytesWritten cannot be NULL. If lpOverlapped is not NULL, lpNumberOfBytesWritten can be NULL. If this is an overlapped write operation, you can get the number of bytes written by calling GetOverlappedResult. If hFile is associated with an I/O completion port, you can get the number of bytes written by calling GetQueuedCompletionStatus.
-
verstehe nicht ganz kannst du mir erklären was mein Fehler ist
-
BOOL h = WriteFile(hCom, "170", 1, 0, NULL);
Das ist aus Deinem Code.
Also ist bei Dir der Parameter lpOverlapped NULL, und der Parameter lpNumberOfBytesWritten ist auch NULL.Nun lies das Zitat aus der MSDN nochmal, wo drinsteht, das lpNumberOfBytesWritten nicht NULL sein darf wenn lpOverlapped bereits NULL ist!
Siehst Du jetzt was -King- bereits schrieb? Der 4. Parameter darf bei Dir nicht NULL sein!
Außerdem sieht mir das sehr verdächtig aus:
Du willst den Textstring "170" übergeben, sagst Der Funktion aber im selben Atemzug das sie nur 1 Byte senden soll... ist "170" nicht größer als 1 Byte?
-
Danke erstmal bisher
aber habe das Problem selbst wenn ich
int buff = 10;
DWORD dwBytesWritten;BOOL write = WriteFile(hCom, (int*)buff, sizeof(buff), &dwBytesWritten, NULL);
schreibe immer noch oder wo liegt mein Denkfehler
-
Was steht überhaupt in m_pCOMPort? Kommt der Fehler jetzt schon vor dem WriteFile Aufruf (von CreateFile oder SetCommState?)
-
Kuli schrieb:
int buff = 10; DWORD dwBytesWritten; BOOL write = WriteFile(hCom, (int*)buff, sizeof(buff), &dwBytesWritten, NULL);
Weißt du überhaupt, was du da schreibst?
Der 2. Parameter von WriteFile ist lt. Platform SDK Doc "Pointer to the buffer containing the data to be written to the file". Also ein Zeiger auf irgendwelche Daten. buff ist bei dir aber kein Zeiger, und auch durch einen cast wird es keiner. Du hast einen Zeiger erzeugt, der auf die Speicherstelle 10 zeigt. Das ist natürlich Murks.
Du kannst ruhig sowas wie "42" (mit den Anführungszeichen!) übergeben. Wenn du dann bei den zu sendenden Bytes aber 1 angibst, wird nur die 4 gesendet und sonst nichts.
Vielleicht willst du aber die 10 senden, die in buff drinsteht. Dann ist buff aber ein irreführender Name.
Dafür benötigst du aber keinen cast, sondern die Adresse von buff. Die kriegst du mit &.