Jo, hier einmal die ausgelagerte Version der Diskussion über __thiscall.
Kann jemand was zu der Implementation sagen? Wie schreibt es eigentlich der Standard vor (oder ist __thiscall MS spezifisch)?
Mich wundert vor allem der sinnvolle Hinweis von IntelliSense, dass thiscall bei statischen Methoden nicht zulässig ist, während es der Compiler dennoch annimmt.
Was wäre die eleganteste Methode, echte Klassenmethoden (keinen DX-like C-Nachbau) zu definieren, um sie nutzen zu können, sprich hooken und aufrufen.
Eine Möglichkeit, die Methoden von reversed Klassen auch direkt in deren Deklarationen angeben zu können, um komfortables OOP zu nutzen, wäre schon schön. Mit den trivialen Lösungen ist mir das bisher nicht gelungen und Padmaks Lösung kann ich nicht nachvollziehen (zumal eine statische Methode schonmal für polymorphe Klassen ungünstig ist). Gerade eine elegante Möglichkeit, mit Methodenzeigern zu hantieren, wäre mir willkommen.
Hier mal der Inhalt des ersten relevanten Posts:
Spätestens beim Hooken wird er ohnehin fastcall benötigen, da thiscall nicht für normale Funktionen angegeben werden kann.
Kann jemand was zu der Implementation sagen? Wie schreibt es eigentlich der Standard vor (oder ist __thiscall MS spezifisch)?
Mich wundert vor allem der sinnvolle Hinweis von IntelliSense, dass thiscall bei statischen Methoden nicht zulässig ist, während es der Compiler dennoch annimmt.
Was wäre die eleganteste Methode, echte Klassenmethoden (keinen DX-like C-Nachbau) zu definieren, um sie nutzen zu können, sprich hooken und aufrufen.
Eine Möglichkeit, die Methoden von reversed Klassen auch direkt in deren Deklarationen angeben zu können, um komfortables OOP zu nutzen, wäre schon schön. Mit den trivialen Lösungen ist mir das bisher nicht gelungen und Padmaks Lösung kann ich nicht nachvollziehen (zumal eine statische Methode schonmal für polymorphe Klassen ungünstig ist). Gerade eine elegante Möglichkeit, mit Methodenzeigern zu hantieren, wäre mir willkommen.
Hier mal der Inhalt des ersten relevanten Posts:
Und wo siehst du, dass this und Function ptr gleich sind?Quote:
Das hier ist VÖLLIG falsch, falls der TE nicht den Borland C++-Compiler (Embarcadero) benutzt sondern den Visual C++-Compiler
Mit Visual C++ sieht der typedef so aus:
typedef int (__thiscall* TSendChatPacket)(int _this, int mode, const char* message);
Und auch sonst ist dein Code völliger Schwachsinn:
Die Funktion und this können nicht beide die gleiche Adresse haben.
0x6B47AC ist zwar tatsächlich die CPythonNetworkStream-Instanz, die Funktion hat aber 'ne völlig andere Adresse.
Tu uns allen einen Gefallen: es gibt schon genügend Crap-Code in Metin2, bitte gesell dich nich auch noch dazu^^
Padmak
Spätestens beim Hooken wird er ohnehin fastcall benötigen, da thiscall nicht für normale Funktionen angegeben werden kann.