__thiscall

Microsoft 特定的 __thiscall 呼叫慣例用於 x86 架構上的 C++ 類別成員函式。 這是成員函式不使用變數引數 ( vararg 函式) 所使用的預設呼叫慣例。

在 下 __thiscall ,被呼叫者會清除堆疊,這對函式而言是不可能的 vararg 。 引數會從右至左推入堆疊。 指標 this 會透過暫存器 ECX 傳遞,而不是在堆疊上傳遞。

在 ARM 上,編譯器接受並忽略 ARM64 和 x64 機器 __thiscall 。 這是因為它們預設會使用以暫存器為基礎的呼叫慣例。

使用 __thiscall 的原因之一是成員函式預設使用的 __clrcall 類別中。 在此情況下,您可以使用 __thiscall ,讓個別成員函式可從機器碼呼叫。

使用 編譯 /clr:pure 時,除非另有指定,否則所有函式和函式指標都是 __clrcall 。 和 /clr:safe 編譯 /clr:pure 程式選項在 Visual Studio 2015 中已被取代,在 Visual Studio 2017 中不受支援。

vararg 成員函式會使用 __cdecl 呼叫慣例。 所有函式引數都會推送在堆疊上, this 最後放置於堆疊上的指標。

由於此呼叫慣例僅適用于 C++,因此沒有 C 名稱裝飾配置。

當您在外行定義非靜態類別成員函式時,請只在宣告中指定呼叫慣例修飾詞。 您不需要在離線定義上再次指定它。 編譯器會使用定義點宣告期間指定的呼叫慣例。

另請參閱

引數傳遞和命名慣例