s2ext

Bitte logg dich ein oder registriere dich.

Einloggen mit Benutzername, Passwort und Sitzungslänge
Erweiterte Suche  

Neuigkeiten:

Fehler und Spammer oder Probleme beim Login hier melden.

Autor Thema: Aufrufkoventionen  (Gelesen 5118 mal)

SJK

  • Newbie
  • *
  • Beiträge: 6
Aufrufkoventionen
« am: März 24, 2008, 20:48:48 Nachmittag »

Hi Leute!

Habe zuletzt ein DLL-basiertes Plug-In-System in Delphi geschrieben. Dazu hab ich eine Methode gebastelt, die das Aufrufen externer Routinen mit dynamischer Parameterliste ermöglicht, d. h. ich kann alle möglichen Procs aufrufen, egal wie viele Parameter sie hat und welchen Datentyp Parameter und Rückgabewert haben.

Dabei bin ich über Aufrufkonventionen gestolpert.

Das war auch kein Problem, aber ich würde gerne mal wissen, wofür man so viele verschiedene Konventionen braucht? Die meisten unterscheiden sich ja nur in der Weise, in welcher Reihenfolge die Parameter in die Register geschrieben werden. Heutige Prozessoren können werden doch mit allen fertig... warum gibt es trotzdem so viele?

Und ist es möglich herauszufinden, mit welcher Aufrufkonvention eine bestimmte Routine aufgerufen werden muss? Denn wenn man die falsche nimmt, dann gibts nen Fehler...

LG
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert
"Ich verkaufe diese tollen Lederjacken." - "Wie passend, du kämpfst wie eine Kuh!"

"Komm rein, setz Dich, nimm Dir \'nen Keks, machs Dir schön bequem... DU ARSCH!"

bizzl

  • Newbie
  • *
  • Beiträge: 742
Re: Aufrufkoventionen
« Antwort #1 am: März 24, 2008, 21:23:51 Nachmittag »

Zitat von: "SJK"
Hi Leute!

Habe zuletzt ein DLL-basiertes Plug-In-System in Delphi geschrieben. Dazu hab ich eine Methode gebastelt, die das Aufrufen externer Routinen mit dynamischer Parameterliste ermöglicht, d. h. ich kann alle möglichen Procs aufrufen, egal wie viele Parameter sie hat und welchen Datentyp Parameter und Rückgabewert haben.

Dabei bin ich über Aufrufkonventionen gestolpert.

Das war auch kein Problem, aber ich würde gerne mal wissen, wofür man so viele verschiedene Konventionen braucht? Die meisten unterscheiden sich ja nur in der Weise, in welcher Reihenfolge die Parameter in die Register geschrieben werden.
Programmiersprachen sind natürlich gewachsene Dinge. Verschiedene Compilerentwickler haben halt verschiedene Regelungen lieber gemacht (sehen wir heute noch beim Namewrangling in C++APIs :/ )

Zitat von: "SJK"
Heutige Prozessoren können werden doch mit allen fertig... warum gibt es trotzdem so viele?
Calling Conventions haben nix mit dem Prozessor zutun, der kennt weder lange Parameterlisten noch andere Komplexe Codegebilde (kein übliches if, keine Schleifen, keine Operationen mit mehr als 2 Werten, und gesprungen wird mit einem GOTO-Äquivalent)
Die Conventionen sind für die Codegeneriung da, sie definieren in welcher reihenfolge die Parameter auf dem Stack kommen, wer sie dort wieder raus holt und wo der Rückgabewert landet.

Zitat von: "SJK"
Und ist es möglich herauszufinden, mit welcher Aufrufkonvention eine bestimmte Routine aufgerufen werden muss? Denn wenn man die falsche nimmt, dann gibts nen Fehler...
Im allgemeinen wird unter Windows immer stdcall und auf allen anderen OS cdecl benutzt. Andere Conventionen sind ungebräuchlich.
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert

SJK

  • Newbie
  • *
  • Beiträge: 6
Re: Aufrufkoventionen
« Antwort #2 am: März 25, 2008, 11:10:51 Vormittag »

Hey Bizzl!

Danke für die Antwort.

Das mit stdcall stimmt, ist meistens so...

Aber wenn ich tatsächlich mal eine Routine habe, von der ich nicht weiß, mit welcher Convention sie aufgerufen werden muss, bleibt mir eig nur die brutale Möglichkeit, alle durchzuprobieren und die zu Konvention zu nehmen, bei der das Programm nicht abstürzt?!

Na wunderbar^^

Aber mit dem integrierten Assembler von Delphi werd ich das wohl hinkriegen...

Gruß, Sascha
« Letzte Änderung: Januar 01, 1970, 01:00:00 Vormittag von Guest »
Gespeichert
"Ich verkaufe diese tollen Lederjacken." - "Wie passend, du kämpfst wie eine Kuh!"

"Komm rein, setz Dich, nimm Dir \'nen Keks, machs Dir schön bequem... DU ARSCH!"