Funktionszeiger an Dialog übergeben



  • allo nochmal,

    ich bekomm hier langsam nen Vogel 🙂

    Und zwar will ich "einfach" nur nen Funktionszeiger an einen Dialog übergeben. Also einfach nur die Adresse der Funktion in eine Membervariable des Dialogs den ich danach über DoModal() öffnen möchte.

    im Dialog hab ich eine Membervariable folgendermaßen angelegt:

    typedef void(*func)(void);
    	func pFunc;
    

    So und in der Hauptanwendung versuche ich nun einfach der Variablen einen Zeiger zuzuweisen:

    CDlgDialog1 dlg;
    	dlg.pFunc = TestFunc;
    

    Dabei ist "void TestFunc(void)" dann eine weitere Funktion der Hauptanwendung.

    Fehler in dem obigen Falle lautet:

    f:\projekte 2003\PointerInDlg\PointerInDlg\PointerInDlgDlg.cpp(156): error C2440: '=': 'void (__thiscall CPointerInDlgDlg::* )(void)' kann nicht in 'CDlgDialog1::func' konvertiert werden

    Ich hatte aber auch schon ca. 20 andere Fehler zwischendurch, aber ich hab hier jetzt extra mal meine Startvariante gepostet, die ist am einfachsten - funktionieren ja eh alle bisher nicht 🙂

    Aber egal wie ich mich auch drehe und wende (hab schon alle möglichen casts ausprobiert) - ich bekomme es rinfach nicht hin 😞



  • ein Blick ins C++-Forum hat mir abhilfe geschafft:

    typedef void(CPointerInDlgDlg::*func)(void);
    

    🙂



  • Solche Selbstgespräche kenne ich. 😉
    Aber, irgendwie verstehe ich den Sinn eines Funktionszeigers nicht?
    Was hat man dadurch erreicht? Kannst du nicht einfach so die Methoden eines Objektes nutzen?



  • Hi,

    ja gut, diese mal hatte ich zwar die SuFu für MFC und die MFC-FAQ benutzt, sowie google, erstes war ziemlich spärlich, zweites hatte ich alles nicht so richtig kapiert 😉 Aber hier im CPP-Teil gab es nen guten Link zu nem Tutorial, bei dem mir das Licht aufgegangen ist.

    Viel schlimmer ist ja noch, wenn einem beim nachträglichen durchlesen der Fehler schon selbst auffällt 😃

    Zu dem Sinn:
    Ich brauche in dem Dialog selbst den Zeiger eigentlich gar nicht, sonst könnte ich ja einfach this vom aufrufenden Objekt übergeben und die Methoden direkt aufrufen.
    Dieser Dialog managed meine Dateninput-PlugIn-DLLs (laden/entladen/konfigurieren), um die Daten aus nem PlugIn in das Array des Hauptprogramms zu schreiben benutze ich eine Callback-Funktion, dessen Adresse ich beim initialisieren des PlugIns übergebe, die Initialisierung findet aber eben in dem Dialog statt und dazu brauch ich die Adresse.

    Wenn ich mir das so durchlese - hmm, wenn ich Methoden aufrufen könnte, habe ich ja auch deren Adresse zum übergeben 🙄
    Muss ich mal probieren ob das übersichtlicher ist 🙂 Naja so hab ich wenigstens jetzt die Grundlagen über Funktionspointer mal richtig(er) gelernt 😉



  • Ok, um das ganze wirklich zu verstehen, muss ich mir mehr Zeit nehmen. Klingt schon ziemlich kompliziert. 😉
    Aber du schaffst das schon. Danke für die Aufklärung. 😃


Anmelden zum Antworten