_stdcall / _cdecl unterschiede?



  • hi,
    könnte mir mal jemand den unterschied zwischen _stdcall und _cdecl erläutern? ich blick da irgendwie nich durch 😞

    danke, MJ



  • mich würd auch mal interessieren wozu man das überhaupt braucht.



  • Das sind Aufrufkonventionen, d.h. Spezifikationen, wie ein Funktionsaufruf auf Maschinencodebene auszusehen hat. Bei _cdecl werden AFAIK die Argumente von rechts nach links auf den Stack gepackt, und nach dem Ablauf der Funktion vom Aufrufer wieder entfernt. Bei _stdcall werden sie von links nach rechts draufgepackt, wobei die Funktion vor der Rückkehr selbst die Argumente entfernt.



  • macht das dann irgendeinen unterschied welches von beiden ich dann verwende? kann man beide zusammen verwenden? gibts eine "default" aufrufkonvention?



  • Standard C++ kümmert sich aber nicht (zumindest so offensichtlich) darum.
    "Calling Conventions" bringt dir bei google gute resultate.
    Ich denke auch, so etwas (bis auf die Schlüsselwörter) ist auch nicht unbedingt windowsspezifisch. Ab nach Rund Um.



  • In ner DLL (oder der entsprechenden Unix-Variante davon) musst Du angeben, in welcher Reihenfolge die Parameter auf dem Stack liegen, wer sie aufräumt (der Aufrufer oder der Aufgerufene etc.). Wie das vonstatten geht ist prinzipiell Compiler/Herstellerspezifisch.
    Wenn Du also ne DLL die in mit Compiler X geschrieben ist, in einem Proggi das mit Compiler Y geschrieben ist verwenden willst, musst Du auf die richtigen Calling-Conventions achten sonst boom.
    Das ganze ist also vollkommen Compilerabhängig.
    So ist z.B. - als nette Dreingabe - das was bei den MS Compilern stdcall ist bei den Borland-Compilern cdecl (und umgekehrt natürlich).


Anmelden zum Antworten