Memberfunktion-Zeiger?
-
Hi,
ich brauche nur die Speicheradresse, wo sich eine Memberfunktion einer bestimmten Klasse befindet. Wie mache ich dies? Einfach &MyClass.MyFunc geht ja leider net
Danke,
Padawan333
-
zeig mal deinen code dann können wir dir helfen
und mach ihn in die [cpp] tags 
-
öhhhhh, ok...
class CTest { public: void t(void); }; int main() { CTest test; void* p=&test->t; // Wie? Ich brauche nur die Speicheradresse, mehr will ich net return 0; }
-
muss natürlich &test.t heißen
-
&CTest::test
-
Ich versteh das irgendwie nicht

Naja, hier jetzt mein Problem. In meinem Programm wird irgendwas erstellt. das geht so:class CTest { public: void a(void); }; CTest* p; CreateSomething(&p);CreateSomething ist in irgendeiner DLL definiert und macht intern sowas:
class CTest { public: void a(void); }; void CreateSomething(CTest** p) { *p=new CTest; }Nun möchte ich aus bestimmten Gründen(AntiCheatProtection um genau zu sein) gucken, von welcher DLL CreateSomething aufgerufen wurde. Ich dachte, ich nehm einfach die Speicherposition von der a-Funktion des erstellten CTest und überprüfe, in welcher DLL man die Funktion finden kann (es gibt Win32 Makros dafür)

-
Hallo,
zum einen sind void-Zeiger und Funktionszeiger nicht kompatibel zueinander. Zum anderen sind Memberfunktionszeiger nicht immer reine Adressen.
Auch gehört zu einem Memberfunktionszeiger immer der Typ der Klasse. Sprich: ein Memberfunktionszeiger der auf eine Memberfunktion der Klasse Foo mit der Signatur void() zeigen kann hat den Typ: void (Foo::)();
Dieser Typ ist weder kompatibel zu void noch zu einem Funktionszeiger void (*)();