Frage

Sie haben einen guten Grund?

Sind ihre internen Funktionen (nicht exportiert) auch stdcall Konvention?

War es hilfreich?

Lösung

Es war eine Anpassung an die pascal Aufrufkonvention für 32-Bit-Code. Pascal war die Aufrufkonvention für 16-Bit-Betriebssysteme wie OS / 2 und Windows 3. Warum pascal wurde gewählt, ein bisschen eine Vermutung ist, auch ich war ein kleiner Welpe damals, aber es ist etwas effizienter. Welche zählte zurück, als 640 KB war alles, was Sie zur Arbeit mußten.

Die meisten Win32-Funktionen sind nicht wahr stdcall wie es auch vor, wie die exportierte Funktion eingerichtet wird, bevor an den Linker dargestellt. Wie nichtig Mumble (int arg) wird _Mumble @ 4. Die Zahl nach dem @ beschreibt die Aktivierung Rahmengröße. Aber die meisten Win32-Funktionen werden ohne Dekoration exportiert. Wahrscheinlich dem Programmierer eine Chance zu geben, GetProcAddress () Arbeit zu machen. Ich denke, die Dekoration sollte der Linker erkennt Diskrepanzen zwischen der deklarierten API-Funktion Signatur und der tatsächlichen eine helfen. eine Diskrepanz in der Anzahl der übergebenen Argumente zu haben, ist eine automatische kaboom da die Angerufene dann weitergegeben wurden mehr oder weniger Argumente vom Stapel pop wird. Schwer zu zu diagnostizieren. Eine Schwäche stdcall, die cdecl Konvention nicht über dieses Problem.

Interne Berufung ist eine bunte Mischung zwischen stdcall, cdecl und Thiscall. Kann nicht sagen, dass ich jemals ein Muster erkannt habe, obwohl im Einzelschritt Windows-Code nicht etwas, was ich gerne tun.

Andere Tipps

Code mit stdcall kompiliert ist deutlich kleiner als Code mit cdecl zusammengestellt (die Alternative). Zu der Zeit wurde die Entscheidung getroffen, kleiner Code war schneller Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top