__fastcall
Microsoft-spezifisch
Die __fastcall Aufrufkonvention gibt an, dass Argumente für Funktionen in Registern übergeben werden sollen, falls möglich.Die folgende Liste zeigt die Verwendung dieser Aufrufkonvention an.
Element |
Implementierung |
---|---|
Reihenfolge Argument-übergeben |
Das erste DWORD oder zwei Argumente werden in kleinere ECX- und EDX-Register übergeben. alle anderen Argumente werden von rechts nach links übergeben. |
Stapel-Wartung Verantwortung |
Aufgerufene Funktion nimmt die Argumente vom Stapel. |
Namensergänzungskonvention |
@-Zeichen wird den Namen vorangestellt. ein @-Zeichen, das von der Anzahl von Byte folgt (dezimal) in der Parameterliste wird an den Namen angefügt. |
CASE-Übersetzung Konvention |
Keine Fallübersetzung ausgeführt. |
Hinweis |
---|
In zukünftigen Versionen möglicherweise andere Register - Compiler verwenden, um Parameter zu speichern. |
Verwenden /Gr-Compileroption wird die einzelnen Funktionen im Modul als fastcall zu kompilieren, es sei denn, die das Arbeiten mit einem in Konflikt stehenden Attribut deklariert ist, oder der Name der Funktion ist main.
Auf Itanium-Prozessorfamilie (IPF) und AMD64 Computern __fastcall wird vom Compiler akzeptiert und ignoriert. vereinbarungsgemäß auf einem IPF-Chip Parameter in Registern übergeben werden.
Eine nicht statische Klassenfunktionen wenn die Funktion definierten Out-of-Line ist, muss der Aufrufkonvention modifizierer jedoch nicht in der Definition Flucht angegeben werden.Das bedeutet, dass für nicht statische Member Methoden der Klasse, wird der Aufrufkonvention, die während der Deklaration angegeben wird, zum Zeitpunkt der Definition angenommen.Wenn diese Klassendefinition
struct CMyClass {
void __fastcall mymethod();
};
this
void CMyClass::mymethod() { return; }
ist äquivalent zu diesem
void __fastcall CMyClass::mymethod() { return; }
Beispiel
Im folgenden Beispiel ist die Funktion mit dem Namen DeleteAggrWrapper in Registern übergebene Argumente:
// 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, ...);