CreateFile... HANDLE
-
Hallo,
HANDLE my_handle; Von welchem Typ ist my_handle
my_handle = CreateFile(com,GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
und wie kann ich einen Zeiger von my_handle einer Function übergeben?
void test(????* handle);
Gruß
Johann
-
my_handle ist bei dir vom Typ HANDLE.
HANDLE ist glaub ich übersetzt long, bin mir aber nicht sicher.
Einer Funktion kannst du einfach ein HANDLE* übergeben, also
void test(HANDLE* handle);p.s. Ich hoffe ich habe jetzt keinen schmarn erzählt.
-
HolyMetaler schrieb:
my_handle ist bei dir vom Typ HANDLE.
HANDLE ist glaub ich übersetzt long, bin mir aber nicht sicher.
Einer Funktion kannst du einfach ein HANDLE* übergeben, also
void test(HANDLE* handle);p.s. Ich hoffe ich habe jetzt keinen schmarn erzählt.
Versuche ich es mit
void test(HANDLE* handle);
test(my_handle);
gibt der Compiler folgende Fehlermeldung
cannot convert 'void*' to 'void**', es scheint so als ob HANDLE my_handle
schon ein Zeiger ist, oder wie soll ich das verstehen.auf jeden Fall funktioniert der Aufruf test(my_handle) nicht,
da nach dem Aufruf der Function test (hier wird COM1 initialisiert) in my_handle nicht der Korrekte handle steht.Gruß
Johann
-
der aufruf müsste test(**&**my_handle) heißen.
-
HolyMetaler schrieb:
der aufruf müsste test(**&**my_handle) heißen.
Auch schon probiert, in der Funktion test hat der handle nach CreateFile("COM1"
.......) laut Debuger den Wert 0x0000000C, bin ich aus der Function raus
hat handle den Wert NULL.
-
Kann nicht sein, wenn du es so aufrufst wie beschrieben.
Zeig mal bitte den relevanten Codeausschnitt.
-
cd9000 schrieb:
Kann nicht sein, wenn du es so aufrufst wie beschrieben.
Zeig mal bitte den relevanten Codeausschnitt.
char com1[5] = "COM1\0"; HANDLE chandle; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { if (!init_rs232(19200,com1,&chandle)) { Application->MessageBox("RS232 Init Error","RS232",MB_OK | MB_ICONERROR); Close(); } // Hier hat chandle NULL; } bool init_rs232(int baudrate,char* com,HANDLE chandle) { chandle = CreateFile(com,GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL); // Hier hat chandle 0x0000000c if (chandle != INVALID_HANDLE_VALUE) { //Hier wird die Baudrate, Timeouts gesetzt. return 1; } else { Application->MessageBox("RS232 Init Error","RS232",MB_OK | MB_ICONERROR); return 0; } }
edit: Codetags hinzugefügt.
-
hermes schrieb:
char com1[5] = "COM1\0";
"COM1\0" besteht aus 6 Elementen, nicht aus 5.
Du übergibst &chandle, also den Typ HANDLE*. Warum übernimmt init_rs232 dann keinen HANDLE*?