Nichtstatische Callback-Funktion



  • Hi,

    ist das möglich? Ich möchte in der Callback Funktion einen
    CButton von deaktiviert auf aktiviert setzen. Jedoch kann ich
    nur eine statische Funktion als Callback angeben wo ich dann
    ja nix verändern kann, gibt's da was 😕

    mfg
    tobi



  • Warum kannst da nichts verändern 😕
    Einfach nen this pointer mit übergeben.



  • thx, aber..

    Wenn ich den this-Zeiger übergebe kommt immer:

    Konvertierung des Parameters 1 von 'void' in 'void (__cdecl *)(void)' nicht moeglich

    void CMTDlg::cb(CMTDlg* zeiger)
    {
    	zeiger->GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
    	CString b("bla");
    	AfxMessageBox(b);
    }
    
    void CMTDlg::machdas(void callback())
    {
    	callback();
    }
    
    void CMTDlg::OnButton1() 
    {
    	machdas(cb(this));
    }
    

    wobei dann später die Callbackfunktion aus einer anderen Klasse aufgerufen werden soll.
    - Objekt von anderer Klasse instanziiren
    - Methode des neuen Objekts aufrufen, Funktion übergeben
    - Funktion setzt im ursprünglichen Object einen Button auf true/false

    mfg
    tobi



  • typedef void (CALLBACK* MY_CALLBACK)(void *p);
    
    void CMTDlg::cb(void* param)
    {
        CMTDlg *zeiger = (CMTDlg*)param;
        zeiger->GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
        CString b("bla");
        AfxMessageBox(b);
    }
    
    void CMTDlg::machdas(MY_CALLBACK callback, void *param)
    {
        callback(param);
    }
    
    void CMTDlg::OnButton1() 
    {
        machdas(cb,this);
    }
    


  • hmm das funzt so auch irgendwie noch nicht..

    ich war nun vorher selber schon drauf gekommen den this-Zieger auch beim
    Aufruf der Callbackfunktion zu übergeben 😃

    void CMTDlg::machdas(void* callback(void* p), void* param)
    

    ergibt:

    Konvertierung des Parameters 1 von 'void (void *)' in 'void *(__cdecl *)(void *)'

    und deins

    typedef void (CALLBACK* MY_CALLBACK)(void *p);
    void CMTDlg::machdas(MY_CALLBACK callback, void* param)
    

    ergibt:

    Konvertierung des Parameters 1 von 'void (void *)' in 'void (__stdcall *)(void *)'

    ich würd mal sagen die Fehler sehen irgendwie ähnlich aus 😋



  • Konvertierung des Parameters 1 von 'void (void *)' in 'void (__stdcall *)(void *)'

    und void CMTDlg::cb ist auch sicher static? 🤡



  • Jo 😞

    direkt c+p aus meinem h-filer:

    static void cb(void* param);
    


  • AAAAAHHHHHHHHHHHHH !!!

    es geht!

    void CMTDlg::machdas(void callback(void* p), void* param)
    

    Die Methode muss void und nicht void* zurückliefern.. son sch.. 🙂

    thx CMATT für deine bemühungen

    mfg
    tobi


Anmelden zum Antworten