Share via


__thiscall

Die microsoftspezifische__thiscall Aufrufkonvention wird für C++-Klassenmememmfunktionen in der x86-Architektur verwendet. Es ist die standardanrufliche Konvention, die von Memberfunktionen verwendet wird, die keine variablen Argumente (vararg Funktionen) verwenden.

Unter __thiscall, der angerufene sauber den Stapel, der für vararg Funktionen unmöglich ist. Argumente werden vom Stapel von rechts nach links verschoben. Der this Zeiger wird über das Register ECX und nicht über den Stapel übergeben.

Auf ARM-, ARM64- und x64-Computern __thiscall wird vom Compiler akzeptiert und ignoriert. Das liegt daran, dass sie standardmäßig eine registerbasierte Anrufkonvention verwenden.

Ein Grund für die Verwendung __thiscall ist in Klassen, deren Memberfunktionen standardmäßig verwendet werden __clrcall . In diesem Fall können Sie dazu verwenden __thiscall , einzelne Memberfunktionen aus systemeigenem Code aufzurufen.

Bei der Kompilierung mit /clr:pureallen Funktionen und Funktionszeigern wird __clrcall nichts anderes angegeben. Die /clr:pure Optionen und /clr:safe Compileroptionen sind in Visual Studio 2015 veraltet und werden in Visual Studio 2017 nicht unterstützt.

vararg Memberfunktionen verwenden die __cdecl aufrufende Konvention. Alle Funktionsargumente werden auf den Stapel verschoben, wobei der this Zeiger auf dem Stapel zuletzt platziert wird.

Da diese Aufrufkonvention nur für C++ gilt, verfügt sie nicht über ein C-Namens-Dekorationsschema.

Wenn Sie eine nicht statische Klassenmemmembefunktion außerhalb der Zeile definieren, geben Sie den Aufrufkonventionsmodifizierer nur in der Deklaration an. Sie müssen sie nicht erneut in der out-of-line-Definition angeben. Der Compiler verwendet die während der Deklaration angegebene Aufrufkonvention an der Definitionsstelle.

Siehe auch

Übergeben von Argumenten und Benennungskonventionen