Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#69

Re: Übersetzung Class MagneticWindow

  Alt 12. Okt 2006, 02:28
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ß
  Mit Zitat antworten Zitat