Funktionen zu Events manuell zuweisen !?



  • moin,
    ich schreibe einen chat server als Konsolenanwendung (hab also keinen Object Inspector zur verfügung)
    Jetzt muss ich z.B. dem event OnClientError eine Funktion zuweisen.
    wie mache ich das?? 😕
    ich hab da ma was ausprobiert (wahrscheinlich schwachsinn ^^):

    ...

    void __fastcall SocketError(TObject *Sender,
              TCustomWinSocket *Socket, TErrorEvent ErrorEvent,
              int &ErrorCode)
    {
    // tu was
    }
    

    ...

    // Funktion zuweisen
    server->OnClientError=SocketError;
    

    ...

    erhalte aber dann den Error:
    ⚠**[C++ Error] Unit1.cpp(39): E2034 Cannot convert 'void (_fastcall *)(TObject *,TCustomWinSocket *,TErrorEvent,int &)' to 'void (_fastcall * (_closure )(TObject *,TCustomWinSocket *,TErrorEvent,int &))(TObject ,TCustomWinSocket ,TErrorEvent,int &)'

    kann einer bitte den code so berichtigen, dass es funtzt?



  • SocketError muss ein Klassenmember sein...



  • das heißt??? ... 😕😕😕
    was soll ich denn jetzt tun?



  • Also ich hab ma sowas gemacht:

    class TServer
    {
    public:
    void __fastcall SocketError(TObject *Sender,
              TCustomWinSocket *Socket, TErrorEvent ErrorEvent,int &ErrorCode);
    void __fastcall ClientConnect(TObject *Sender,
              TCustomWinSocket *Socket);
    void __fastcall ClientDisConnect(TObject *Sender,
              TCustomWinSocket *Socket);
    void __fastcall print(AnsiString txt);
    };
    
    void __fastcall TServer::print(AnsiString txt){
    txt=txt+"\r\n";
    cprintf(txt.c_str());
    }
    void __fastcall TServer::SocketError(TObject *Sender,TCustomWinSocket *Socket, TErrorEvent ErrorEvent,int &ErrorCode){
    print("   ***Error: Code "+AnsiString(ErrorCode));
    }
    void __fastcall TServer::ClientConnect(TObject *Sender,TCustomWinSocket *Socket){
    print("   ***Client Connected ("+Socket->RemoteAddress+") at "+Now());
    }
    void __fastcall TServer::ClientDisConnect(TObject *Sender,TCustomWinSocket *Socket){
    print("   ***Client Disconnected ("+Socket->RemoteAddress+") at "+Now());
    }
    
    TServer *Server1;
    
    TServerSocket *server=new TServerSocket(NULL);  // ich weiss net ob NULL richtig is, also bitte bescheid sagen, wenn net
    server->Port=37015;
    server->OnClientError=Server1->SocketError;
    server->OnClientConnect=Server1->ClientConnect;
    server->OnClientDisconnect=Server1->ClientDisConnect;
    server->Active=true;
    

    die Event-Funktionen werden aber net ausgeführt! 😕


Anmelden zum Antworten