pointer auf memberfunktion einer Klasse auf unsigned int casten
-
class Klasse { public: void CALLBACK cbFunc(int,int); void (Klasse::*cbFuncP)(int,int); }; ... cbFuncP = cbFunc; int sysFunc((DWORD)cbFuncP); ...g++ unter win2000 mit minGW meldet fehler:
"aggregate value used where an integer was expected"
-
Du kannst keinen Pointer-to-Member in einen einfachen Funktionstyp casten, weil der Aufruf eines Member immer ein this-Objekt benötigt. Kurz:
// Aufruf einer Methode: objekt.Methode(); // sysFunc hat nur Methode, nicht aber objekt
-
hm, mein BEspiel ist vieleicht zu minimalistisch

void Klasse::somefunc() { cbFuncP = &Klasse::cbFunc; sysFunc((DWORD)cbFuncP); }so, die sysFunc wird in einer Memberfunktin der Klasse aufgerufen
hmm, ich frag mich grad ob das "&" das richtig ist ....
-
wenn ich das ganze so schreibe:
void Klasse::somefunc() { cbFuncP = &Klasse::cbFunc; sysFunc((DWORD)&cbFuncP); }läßt es sich compilieren, aber das Prog stürzt ab.
Aber das "&" an der Stelle müßte auch falsch sein, da das ja nun
ein Zeiger auf n funktionszeiger ist...
-
Lies dir mal das durch:
http://www.codeproject.com/cpp/ImpossiblyFastCppDelegate.asp
-
arachno1d, ganz einfach, kurz und schmerzlos: du kannst einen mem-fun-ptr NICHT auf ein DWORD casten und erwarten dass dann noch irgendwas geht. nicht nicht nicht. es geht nicht. nada. keine chance. nein.
du kannst den aufruf allerhöchstens thunken, aber das ist auch ziemlich garstig...