__fastcall

Microsoft-spezifisch

Die __fastcall aufrufende Konvention gibt an, dass Argumente für Funktionen nach Möglichkeit in Registern übergeben werden sollen. Diese Aufrufkonvention gilt nur für die x86-Architektur. Die folgende Liste zeigt die Implementierung dieser Aufrufkonvention.

Element Implementierung
Reihenfolge der Argumentübergabe Die ersten zwei DWORD oder kleineren Argumente, die in der Argumentliste von links nach rechts gefunden werden, werden in ECX- und EDX-Registern übergeben. Alle anderen Argumente werden vom Stapel von rechts nach links übergeben.
Stapelwartungszuständigkeit Aufgerufene Funktion ruft die Argumente vom Stapel auf.
Namensergänzungskonvention Bei Zeichen (@) wird Namen vorangestellt; ein At-Zeichen gefolgt von der Anzahl der Bytes (im Dezimalzeichen) in der Parameterliste ist mit Namen versehen.
Konvention zur Umwandlung von Groß- in Kleinbuchstaben und umgekehrt Groß-/Kleinbuchstaben werden nicht umgewandelt.
Klassen, Strukturen und Gewerkschaften Wird als "Multibyte"-Typen (unabhängig von der Größe) behandelt und an den Stapel übergeben.
Enumerationen und Enumerationsklassen Wird von der Registrierung übergeben, wenn ihr zugrunde liegender Typ durch register übergeben wird. Beispiel: Wenn der zugrunde liegende Typ intunsigned int oder die Größe 8, 16 oder 32 Bit beträgt.

Hinweis

In zukünftigen Versionen werden von Compilern möglicherweise andere Register zum Speichern von Parametern verwendet werden.

Die Verwendung der /Gr-Compileroption bewirkt, dass jede Funktion im Modul kompiliert __fastcall wird, es sei denn, die Funktion wird mithilfe eines widersprüchlichen Attributs deklariert, oder der Name der Funktion lautet main.

Die __fastcall Schlüsselwort (keyword) werden von den Compilern akzeptiert und ignoriert, die auf ARM- und x64-Architekturen abzielen. Auf einem x64-Chip werden die ersten vier Argumente nach Möglichkeit in Registern übergeben, und zusätzliche Argumente werden auf dem Stapel übergeben. Weitere Informationen finden Sie unter x64-Anrufkonvention. Auf einem ARM-Chip werden bis zu vier Ganzzahl- und acht Gleitkommaargumente in Registern übergeben, und zusätzliche Argumente werden auf den Stapel übergeben.

Bei nicht statischen Klassenfunktionen muss der Aufrufkonventionsmodifizierer nicht für die Out-of-Line-Definition angegeben werden, wenn die Funktion außerhalb der Linie definiert ist. Das bedeutet, dass für nicht statische Membermethoden der Klasse zum Zeitpunkt der Definition die während der Deklaration angegebene Aufrufkonvention angenommen wird. Bei dieser Klassendefinition:

struct CMyClass {
   void __fastcall mymethod();
};

hinzuzufügen. Die Bot-Endpunkt-URL sieht in der Regel so aus:

void CMyClass::mymethod() { return; }

entspricht:

void __fastcall CMyClass::mymethod() { return; }

Aus Gründen der Kompatibilität mit früheren Versionen ist ein Synonym, __fastcall es sei denn, _fastcall die Compileroption /Za (Sprachenerweiterungen deaktivieren) ist angegeben.

Beispiel

Im folgenden Beispiel wird die Funktion DeleteAggrWrapper an Argumente in Registern übergeben:

// Example of the __fastcall keyword
#define FASTCALL    __fastcall

void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Ende Microsoft-spezifisch

Siehe auch

Argumentübergabe und Benennungskonventionen
Schlüsselwörter