Bitte, freut mich dass ich helfen kann.
Was der
asm-Code macht, sehe ich jetzt auch (die Speicheradresse von @next nach dwError schreiben).
Zitat von
goose33:
Noch was :
Code:
DWORD(m_pView) := dwError;
Das is die letzte Zeile unten.
Ich glaub zwar das das so richtig ist aber die beiden * in dem
C++ machen mich ein bischen Stutzig.
Stimmt das denn so ?
Nicht ganz. Das würde den Wert von dwError in die Pointervariable m_pView kopieren. Der Wert soll jedoch an die Speicheradresse kopiert werden, auf die m_pView zeigt:
"(DWORD *) m_pView" entspricht einem Typecast, die Variable m_pView wird nun als Pointer auf ein DWORD angesehen. In Delphi wäre das "PDWORD(m_pView)".
"*(...)" dereferenziert diesen Pointer, damit spricht man das Ziel an, auf das gezeigt wird, und nicht die Pointervariable selbst. In Delphi entspricht das einem angehängten "^".
Komplett also:
PDWORD(m_pView)^ := dwError;
Wenn m_pView direkt als PDWORD deklariert wäre (m_pView: PDWORD statt m_pView: Pointer), dann könnte man sich den Typecast sparen (m_pView^ := dwError). Je nachdem wie m_pView im restlichen Code benutzt wird, wäre das sinnvoll.
Und sECuRE hat natürlich Recht, wäre besser wenn du den C-Stil nicht 1:1 nach Delphi übersetzt, sondern gleich "ordentlichen" Delphicode daraus machst. Aber das macht noch mehr Arbeit.