Eigene Struct zu LPVOID



  • Hallo Forum,
    ich bin grade bei Winsockets. Ich habe eine eigene kleine Struktur CONNECTION. Da ich mehrere Clients haben will, benutze ich Threads:

    CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) Listen_To_Connection, (LPVOID) connection, NULL, 0);
    

    Das geht aber leider nicht, da man mein CONNECTION nicht zu LPVOID casten kann. Versucht habe ich es mit einem Zeiger auf CONNECTION, auf void, ich habe einen reinterpret_cast benutzt, aber nichts klappt.

    Kann mir einer helfen?
    mit freundlichen Grüßen TheCrip



  • Probier mal (LPVOID) &connection . Da musste in der Funktion dann natürlich entsprechend dereferenzieren.



  • So hab ich es probiert:

    //in der main
    CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) Listen_To_Connection, (LPVOID) &(connection[nCount]) , NULL, 0);
    
    //Später...
    
    int WINAPI Listen_To_Connection(LPVOID data)
    {
    	CONNECTION c;
    	&c = data; // Auch mit verschiedenen casts
    //...
    }
    

    Das klappt leider nicht: error C2440: '=': 'LPVOID' kann nicht in 'CONNECTION *' konvertiert werden
    Auch wenn ich einen Zeiger *c nehme, wird das nix.



  • int WINAPI Listen_To_Connection(LPVOID data)
    {
        CONNECTION *c = data;  // habs nich getestet, eventuell ist static_cast oder reinterpret_cast nötig
        c->foo();
    
        // alternativ:
    
        CONNECTION &c = *data; // evntl. mit cast
        c.foo();
    }
    

    Sowas gehört aber mehr oder weniger zu den Basics.



  • ipsec schrieb:

    Sowas gehört aber mehr oder weniger zu den Basics.

    Jup, erst laufen lernen, dann Rennen fahren. 🙂



  • Nur ersteres klappt, mit einem reinterpret_cast. Ich hab das reinterpreten aber nur beim Aufruf von CreateThread benutzt 🙄

    E: Bei mir ist es mittlerweile Learning bei Doing...


Anmelden zum Antworten