__thiscall
Microsoft 專有的
__thiscall呼叫慣例適用於成員函式而不使用可變個數引數的 C++ 成員函式所使用的預設呼叫慣例。在__thiscall,被呼叫端會清除堆疊,也就是不可能vararg函式。引數會推入堆疊由右至左,與this傳入透過暫存器 ECX 中,而不是在堆疊上,在 x86 架構上的指標。
若要使用的原因之一__thiscall中的類別的成員函式使用__clrcall預設狀況下。在此情況下,您可以使用__thiscall ,將個別的成員函式可從原生程式碼呼叫。
以編譯時 /clr: pure,所有函式和函式指標都是__clrcall除非另有指定。
在 Visual C++ 2005年之前的版本中,呼叫慣例 thiscall 無法明確地指定在程式中,因為thiscall不是關鍵字。
vararg成員函式使用__cdecl呼叫慣例。所有的函式引數時,會推入堆疊上,,使用this指標放在堆疊上一次
由於這個呼叫慣例僅適用於 C++,還有沒有 c 名稱裝飾配置。
Itanium 處理器系列 (IPF) 和x64 , __thiscall加以接受並由編譯器 ; 略過 IPF 序號依照慣例,所傳遞的參數在暫存器中。
對於非靜態類別的函式,函式是定義的出行,如果呼叫慣例修飾詞並沒有指定行超出定義上。也就是類別的非靜態成員方法,在宣告期間指定的呼叫慣例會假設為定義點。
範例
// thiscall_cc.cpp
// compile with: /c /clr:oldSyntax
struct CMyClass {
void __thiscall mymethod();
void __clrcall mymethod2();
};