klassen, funktionen, ..



  • hallo ihr.

    wie kann ich von einer globalen funktion also eine die in keiner klasse definiert ist eine funktion aus meiner CIrgendwasDlg zugreifen?

    MEin konkretes problem:
    ich hab eine Callback-funktion für eine dll geschrieben, die kann ich aber nicht als pointer der dll übergeben(warum auch immer??)
    also hab ich eine globale funktion geschrieben, die eine funktion aufruft, die etwas in eine listbox schreibt.(welche ich auch nicht über meine globale funktion ansprechen kann).

    wie kann ich jetzt entweder eine funktion die in CIrgendwasDlg festgelegt ist als pointer übergeben?
    ->error C2276: '&' : Ungueltige Operation auf Ausdruck einer gebundenen Member-Funktion

    oder aber eine memberfuntkion zugreifen?
    ->error C2352: 'CCoolflashDlg::SetText' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion

    oder direkt die listbox ansprechen?
    ->error C2228: Der linke Teil von '.AddString' muss eine Klasse/Struktur/Union sein

    hoff irgendwer hat mich verstanden, bin 😕 *g*
    danke



  • Ich bin mir nicht sicher ob das funzt, aber probier mal deine Globale Funktion als friend deiner Klasse zu Definieren.



  • nö geht ned..
    mit friend könnt ich private und protected functions aufrufen.
    aber die funktion die ich aufrufen will is eh public



  • Du könntest ein Objekt der Klasse CIrgendwasDlg erstellen. Dann kannst Du zugreifen.



  • siehe meine probleme abschnitt 1: *g*

    wie kann ich jetzt entweder eine funktion die in CIrgendwasDlg festgelegt ist als pointer übergeben?
    ->error C2276: '&' : Ungueltige Operation auf Ausdruck einer gebundenen Member-Funktion

    habs jez scho 100 verschiedene sachen probiert.. *verzweifel*



  • Hm, und was hat das ganze mit MFC zutun?
    Das ganze ist ein simples C++-Problem, was hier schon öfter gelöst wurde, denn es ist grundsätzlich nicht möglich, ohne die Instanz eines Objektes zu haben, auf eine nichtstatische Memberfunktion zuzugreifen.



  • bei einer "normalen" Klasse ja..
    aber er(der compiler) meckert immer wenn ich eine 2. instanz meines dialoges erstelle und von dort auf meine member-funktion zugreife.

    abgesehen davon würde die funktion die werte in die listbox meiner 2. instanz schreiben... davon würd ich am Bildschirm dann **aber nix erst sehen

    Auf m_pMainWnd kann ich aber auch ned zugreifen, weil diese wieder in CWinThread eingebaut ist. selbiges problem ich kann auf keine instanz von CWinThread zugreifen.
    (von meiner global definierten funktion halt)

    und ins mfc forum hab ichs gegeben, weil des halt nur bei meiner dialogklasse so bled is dass ichs kein 2.mal instanzieren kann weils sonst den linker streut.
    wenn ich mich irre: tschuldige 🙄 bitte verschieben.**



  • *hochschieb*
    weiß da echt keiner was?



  • Eine normale nicht-statische Member-Funktion braucht ein Objekt, sonst weiß sie nicht, auf was sie angewendet werden soll. Dein Objekt ist ja aber offenbar schon da, Du brauchst doch nur noch den Zeiger darauf. Ich weiß nicht, ob ich das richtig verstehe ...

    Vielleicht hilft:
    CWnd* AfxGetMainWnd( );

    Also:
    AfxGetMainWnd( )->MemberFunction(...);

    Falls nein, dann benutze Dein Dialog-Objekt:
    dlg.MemberFunction(...);

    [ Dieser Beitrag wurde am 27.09.2002 um 23:45 Uhr von Erhard Henkes editiert. ]



  • yeah es geht dankeeeeeeee

    CFlashDlg *cDlg;
    
    cDlg=(CFlashDlg*)AfxGetMainWnd();
    
    cDlg->SetText((CString)logstr);
    


  • Na das war ja eine schwere Geburt. Aber Hauptsache geschafft!
    Schau Dir mal mein Kap. 7 im MFC-Teil an (Doc/View/SDI ...). Da findest Du wichtige Zusammenhänge, wie man von einer Klasse auf die andere zugreift.

    Das ist ein wichtiger OOP-Baustein der MFC.



  • CFlashDlg *cDlg;
    cDlg = (CFlashDlg*) AfxGetMainWnd();
    cDlg->SetText( (CString) logstr );
    

    Ich möchte hier noch einen anderen Aspekt diskutieren, der mich bewegt. In der Windows-Programmierung findet man weitgehend type castings im alten C-Stil (siehe oben). Sollte man hier den neuen C++-Stil fordern, also "funktional" oder gar mit diesem häßlichen static_cast<type>(expression). Wie wird das hier gesehen? Gibt es hierzu einen grundlegenden Artikel im Internet?


Anmelden zum Antworten