__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 名稱裝飾配置。
當您在外行定義非靜態類別成員函式時,請只在宣告中指定呼叫慣例修飾詞。 您不需要在離線定義上再次指定它。 編譯器會使用定義點宣告期間指定的呼叫慣例。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應