@jaenicke
Zitat:
Hattest du diesen Teil seines Codes übersehen?
Nein, aber ich habe nicht gleich realisiert, dass das die Lösung sein könnte.
Danke für den Hinweis, werde mich im Laufe des Tages darum kümmern, jetzt erstmal 2-3 Stunden schlafen.
@jaenicke
So, bin wieder da.
Hab mir das angeschaut und mir ist auch wieder eingefallen, was mich gestört hatte, nämlich der Aufruf der Pascal-Routine "GetException", die außerhalb des
Asm-Blocks liegt, was ich ja gerade vermeiden wollte.
Nach näherer Betrachtung ließ sich das aber leicht beheben.
Die nachstehende Prozedur funktioniert unter 32Bit, nicht aber unter 64Bit (Wie Kas Ob. auch schon deutlich machte).
Wäre schön, wenn da noch einmal jemand, der das durchschaut, reinschauen könnte.
Delphi-Quellcode:
PROCEDURE Test;
const
pExClass:ExceptClass=(
Exception);
sErr:String='
Meine Meldung';
asm
{$IfDef CPUX86}
mov ecx,sErr
mov
dl,1
mov eax,pExClass
call
Exception.Create
call System.@RaiseExcept
{$Else}
mov r8,sErr
mov
dl,$01
mov rcx,pExClass
call
Exception.Create
// Scheint zu funktionieren
mov rcx,rax
call System.@RaiseExcept
// Hier krachts. "ACCESS VIOLATION"
{$EndIf}
end;