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/falsemfg
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