Dieser
ASM-Trick wird häufig verwendet (z.B.
Jedi-Projekt). Es gibt drei Vorteile:
1) Es braucht nicht jedesmal eine individuelle global variable deklariert zu werden. Wenn man nur eine Funktion wrappen muss spielt das keine Rolle, aber bei 150 Funktionen macht einen dieses ständige Copy&Paste schon ganz schön müde.
2) Die Parameter, die sich ja sowieso schon auf dem Stack befinden, werden nicht nochmal auf den Stack kopiert
3) Ein sicherlich zu vernachlässigender Zeitvorteil beim Sprung/Rücksprung in die eigentliche Routine
Wenn der Compiler eine Aufrufkonvention unterstützen würde, bei der die Parameter nicht nochmals kopiert werden müssten, könnte man sich den Umweg über Assembler sparen. Ich würde mir so etwas wünschen (entsprechend des Aufrufs "inherited;"):
Delphi-Quellcode:
var
_SQLite3_Open: FARPROC;
function SQLite3_Open(filename: PAnsiChar;
var db: TSQLiteDB): integer;
cdecl;
begin
if _SQLite3_Open =
nil then
LoadProcAddress(_SQLite3_Open, '
sqlite3_open');
_SQLite3_Open;
end;