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*? 🙄


Log in to reply