In welche Klasse?



  • Hallo
    Ich möchte in einem SDI Programm bei jedem NewDocument, eine Socketverbindung erstellen.
    Dazu wird in OnNewDocument() ein modales Dialogfeld mit den ganzen Daten (Server oder Client, IP, Port) aufgerufen. Dann habe ich eine Funktion geschrieben, die die Verbindung herstellt und diese Werte als Argumente übernimmt.
    Wo soll ich diese Initialisierungsfunktion hingeben (Welche Klasse)?
    Wo ist es am günstigsten. Ich persönlich würde sie ja in die AppKlasse einfügen.
    Aber auf die kann ich komischerweise nicht zugreifen, denn AfxGetApp() liefert mir nur einen Pointer auf eine CWinApp Klasse, nicht aber einen auf meine abgeleitete, in der die Funktion steht.

    Wie soll ich vorgehen? 😕



  • Würde ich entweder in die CDocument-Klasse packen oder in die Klasse die die Verbindung aufbaut (sofern es eine gibt)



  • dü könntest den Rückgabewert von AfxGetApp einfach auf deine Klasse casten.



  • [code]((CMyApp *)AfxGetApp())->SocketInit(...);[/code]



  • Meinst du?

    (CMyApp *)AfxGetApp()->SocketInit(...);
    

    Glaub das hab ich schon mal versucht, und es hat nicht hingehauen.
    Aber ich probiers nochmal

    @Nemesyzz:
    Ich hab ne Klasse von CAsyncvSocket abgeleitet.
    Damit ich die Nachrichten verarbeiten kann.
    Aber von der stehen die Objekte in der App Klasse.



  • Könntest dann die Initialisierungen gleich in die Klasse mit reinbauen.
    Ich würde es so machen das man so ziemlich alles mit der Klasse machen kann und
    nicht irgendwelche Klassen-fremden Funktion nehmen muss. Das schreibt sich
    dann schön.

    z.B.

    Client client;
    
    client.ConnectTo("localhost",MYPORT); // Hier auch die ganzen Init. rein
    client.SendUserdata("User","passwd");
    client.SetMyBirthday("01.01.1902");
    


  • So habs probiert, wie ich oben gepostet habe, und das hat erwartungsgemäß nicht gefungzt

    ABER
    mit static_cast<CMyApp *>(AfxGetApp())->SocketInit(...);
    hats geklappt 😃 😃 😃 😃

    Werds jetzt noch mal mit den zusätzlichen Klammern probieren, da es besser aussieht

    Und Danke!


Anmelden zum Antworten