__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 int unsigned 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für