Ich versuche es zu erklären und hoffe das es das ist was du meinst.
Es wird ein statischer MaschinenCode Buffer erstellt. sSubCode : string;
Die länge des String als Const declariert ist CODE_LEN = 197;
Am anfang der Function werden feste Positionen im Array festgelegt.
Delphi-Quellcode:
PATCH_02 = 68; //Address of the previous WndProc
PATCH_03 = 78; //Relative address of SetWindowsLong
PATCH_06 = 116; //Address of the previous WndProc
PATCH_07 = 121; //Relative address of CallWindowProc
PATCH_0A = 186; //Address of the owner object
Bedeutet PATCH_0A befindet sich im sSubCode an der CODE_LEN Position (186). wert an dieser stelle in byte = 184
sc_aBuf(1) zeigt auf den speicheranfang vom sSubCode HEX = '$55' byte 85
der ObjPtr zeigt auf die Klasseninstanz.
Nun muß der wert der Klasseninstanz an die Position (sc_aBuf(1) + PATCH_0A) mit einer länge von 4 copiert werden.
Delphi-Quellcode:
procedure TMagnetic.zPatchVal(nAddr: Integer; nOffset: Integer; nValue: Integer);
//Patch the machine code buffer at the indicated offset with the passed value
begin
// nAddr=sc_aBuf(1) + nOffset=PATCH_0A, ObjPtr=Klasseninstanz, 4
CopyMemory(Pointer(nAddr + nOffset), Pointer(nValue), 4);
End;
Mit den anderen verhält es sich genauso sind festangelegte werte welche den Index im Array(sc_aBuf) repräsentieren.
Ich hoffe das reicht dir als erklärung..
Sorry das ich nicht verstanden habe was du eigentlich wolltest
Edit:
Alle oben aufgeführte funktionen selbst die Winproc existieren nicht als code
in der Classe sondern als MaschinenCode im speicher.
Lediglich die Messagen werden im Code verwaltet.
gruß