Freigeben über


__thiscall

Microsoft-spezifisch

Die __thiscall-Aufrufkonvention wird für Memberfunktionen verwendet und ist die Standardaufrufkonvention, die von C++-Memberfunktionen verwendet wird, die keine variablen Argumente verwenden. Unter __thiscall entleert der Aufgerufene den Stapel, was für vararg-Funktionen nicht möglich ist. Argumente werden von rechts nach links auf den Stapel geschoben, wobei der this-Zeiger auf der x86-Architektur über das Register "ECX" übergeben wird, und nicht auf dem Stapel.

Die Verwendung von __thiscall ist in Klassen sinnvoll, deren Memberfunktionen standardmäßig __clrcall verwenden. In diesem Fall können Sie __thiscall verwenden, um individuelle Memberfunktionen aus dem systemeigenen Code aufrufbar zu machen.

Beim Kompilieren mit /clr: pure sind alle Funktionen und Funktionszeiger __clrcall, sofern nicht anders angegeben.

In Versionen vor Visual C++ 2005 konnte die thiscall-Aufrufkonvention nicht explizit in einem Programm angegeben werden, da thiscall kein Schlüsselwort war.

vararg-Memberfunktionen verwenden die __cdecl-Aufrufkonvention. Alle Funktionsargumente werden auf dem Stapel abgelegt, wobei der this-Zeiger zuletzt auf dem Stapel abgelegt wird.

Da diese Aufrufkonvention nur für C++ gültig ist, gibt es kein Schema zur C-Namensergänzung.

Auf ARM- und x64-Computern wird __thiscall vom Compiler akzeptiert und ignoriert.

Wenn die Funktion bei nicht statischen Klassenfunktionen abweichend definiert ist, muss der Aufrufkonventionsmodifizierer nicht in der abweichenden Definition angegeben werden. Das bedeutet, dass für nicht statische Membermethoden der Klasse zum Zeitpunkt der Definition die während der Deklaration angegebene Aufrufkonvention angenommen wird.

Beispiel

// thiscall_cc.cpp
// compile with: /c /clr:oldSyntax
struct CMyClass {
   void __thiscall mymethod();
   void __clrcall mymethod2();
};

Siehe auch

Referenz

Argumentübergabe und Benennungskonventionen