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 (*)();


Anmelden zum Antworten