共用方式為


__thiscall

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

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

在 ARM、ARM64 以及 x64 機器上,此編譯器會接受並忽略 __thiscall。 那是因為其預設會使用以暫存器為基礎的呼叫慣例。

其中一個使用 __thiscall 的理由,是在成員函式預設使用 __clrcall 的類別中。 您可以在這種案例中使用 __thiscall,讓個別成員函式可從機器碼呼叫。

/clr:pure 進行編譯時,除非另行指定,否則所有函式和函式指標都是 __clrcall/clr:pure/clr:safe 編譯器選項在 Visual Studio 2015 中已淘汰,且 Visual Studio 2017 已不支援此選項。

vararg 成員函式使用 __cdecl 呼叫慣例。 所有函式引數都推進堆疊中,其中 this 指標最後推入堆疊。

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

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

另請參閱

引數傳遞和命名慣例