Forum: Programmieren allgemein
by Apollonius,
14. Sep 2009
Wenn du aus der Funktion herausjumpst, kann das die Zielfunktion übernehmen. Im Prinzip ist das ein Tailcall, auch wenn das manuelle Aufsetzen eines Stackframes etwas merkwürdig ist.
Forum: Programmieren allgemein
by Apollonius,
14. Sep 2009
Das war doch praktisch mein Vorschlag aus #2. Aber dann wird es eben hässlich, wenn man xPostMessage aus Delphi aufrufen will.
Forum: Programmieren allgemein
by Apollonius,
14. Sep 2009
So what? In einer reinen Assembler-Routine sind Parameter auf dem Stack kein Grund, einen Stackframe zu generieren.
Forum: Programmieren allgemein
by Apollonius,
14. Sep 2009
Quatsch. Das ist ein Detail der Implementation, während die Aufrufkonvention zum Contract gehört. Wenn ich den Stackframe nicht haben will, dann soll der Compiler auch keinen generieren.
Forum: Programmieren allgemein
by Apollonius,
14. Sep 2009
Das ändert am zugrunde liegenden Problem rein gar nichts. Nebenbei bemerkt kannst du dein mov edi, edi jetzt tatsächlich ersatzlos streichen.
Forum: Programmieren allgemein
by Apollonius,
14. Sep 2009
Ich finde das auch extrem lästig. In C++ würde man das mit __declspec(naked) lösen; in Delphi gibt es das nicht. Als hässlichen Workaround kannst du die Parameter sowie das stdcall weglassen. Wenn du die Funktion dann aus Delphi-Code aufrufen willst, nimmst du @xPostMessage und castest in einen entsprechenden Funktionszeigertypen, sodass du die Funktion mit Parametern aufrufen kannst.