Datum:
Hi Leute, ich bräuchte mal eure Hile bei folgendem C++ Code. Ich programmiere gerade meinen Comport. Soweit auch alles klar (erkenne, suchen, etc. der Ports klappt alles schonmal). Nur beim Senden und Empfangen von bits bin ich unsicher. Hier der Code ausschnitt:
. . . char szBuff[9] = {0}; DWORD dwBytesWrite = 128; if(!WriteFile(hSerial, szBuff, n, &dwBytesWrite, NULL)){ cout << "dwBytesWrite: error occurred\n"; } else{ cout << "Geschrieben:" << dwBytesWrite << "\n"; } . . . |
Ich bekomme immer die Ausgabe "Geschrieben: 8". Es ist jetzt so, dass ich "dwBytesWrite = 128" aussende (binär: 10000000), darum auch die "8". Oder stimmt etwas nicht und dwBytesWrite zeigt immer 8 an, egal was passiert? Ziel ist es ja, später über den COMPORT verschiedene Bits zu schicken. Besten Gruß und danke
Datum:
Was ist denn "n" ?
Datum:
Manual nicht gelesen ...
Datum:
Du sendest ab &szBuff[0] soviele Byte, wie in n steht (vermutlich 8). Die Anzahl der gesendeten Byte steht danach in dwBytesWrite (egal, was du vorher drin stehen hattest). Zum Verstehen: http://msdn.microsoft.com/en-us/library/windows/de...
Datum:
Ich will mal nicht so sein:
BOOL WriteFile(
HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes
written
LPOVERLAPPED lpOverlapped // pointer to structure needed for
overlapped I/O
);
Datum:
Tester_X schrieb: > Nur beim Senden und Empfangen von bits bin > ich unsicher. Bits wirst du mit Writefile auch nicht einzeln senden können, nur ganze Bytes.
Datum:
Tester_X schrieb: > Hier der Code ausschnitt: > . > . > . > char szBuff[9] = {0}; die zu sendenen Daten sind also \0-Character > DWORD dwBytesWrite = 128; dwBytesWrite ist ein Rückgabewert, da ist egal, was vorher drinsteht > if(!WriteFile(hSerial, szBuff, n, &dwBytesWrite, NULL)){ was ist n? n gibt die Anzahl der Bytes an, die aus szBuff gelesen werden > Ich bekomme immer die Ausgabe "Geschrieben: 8". Dann war n wahrscheinlich 8 > Es ist jetzt so, dass ich "dwBytesWrite = 128" aussende (binär: > 10000000), darum auch die "8". > > Oder stimmt etwas nicht und dwBytesWrite zeigt immer 8 an, egal was > passiert? Das ist totaler quatsch, bitte lies auch mal die Doku zu Funktionen, die du benutzt. > > Ziel ist es ja, später über den COMPORT verschiedene Bits zu schicken. > Besten Gruß und danke nö, über den COMPORT verschickst du Bytes entsprechend der Konfiguration des Ports Ps: such mal in der Codesammlung nach Portable Serial Library, da ist auch eine Windows implementierung drin
Datum:
Schau mal in der Doku was WriteFile mit der Variablen "dwBytesWrite"
macht.
Wenn in der Variablen 'n' die Größe des Puffers steht, dann solltest du
auch sicherstellen daß der tatsächliche Puffer n Bytes groß ist.
Zum Beispiel mit einer Kostante:
#define BUF_SIZE 9
char szBuff[BUF_SIZE] = {0};
if(!WriteFile(hSerial, szBuff, BUF_SIZE, ....
Datum:
Der Wert, der vor dem Aufruf im ungeschickt benannten "dwBytesWrite" drinsteht, ist völlig irrelevant. Das ist ein Ausgabeparameter, in dem die Funktion ein Ergebnis zurückgibt. Und die Benennung des Parameters in der Dokumentation der Funktion mit dwBytesWritten -- man beachte die Vergangenheitsform! -- sollte darauf hinweisen. Entscheidend ist hier der Parameter n, der teilt der Funktion mit, wieviele Bytes sie schreiben soll.
Datum:
Okay, also erstmal danke für die Hilfe. Jetzt habe ich es gerafft. Manchmal ist Erfahrung und einfaches erklären besser, als eine MSDN website! Gruß und danke
Datum:
hm, was ich von Writefile() kenne, habe ich von der MSDN-Seite... :-)
Datum:
Also ich finde die Dokumentation der Winapi eigentlich super. Das einzige, was ich bemängeln würde ist, dass es ein paar mehr Beispiele geben könnte