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 geklapptWerds jetzt noch mal mit den zusätzlichen Klammern probieren, da es besser aussieht
Und Danke!