Поделиться через


__thiscall

Только для систем Microsoft

__thiscall соглашение о вызовах используется для функций-членов и соглашение о вызовах по умолчанию, используемое функции-членами C++, которые не используют переменные аргументы.Под __thiscall, вызываемый очищает стек, для которого невозможн vararg функции.Аргументы передаются в стек справа налево и this указатель, переданной в регистре ECX, а не в стек, для архитектуры x86.

Одной из причин использования __thiscall в классах функции-члены, которые используют __clrcall по умолчанию.В этом случае можно воспользоваться __thiscall чтобы сделать функции отдельных членов могут вызываться из машинного кода.

При компилировании с /clr: чистыевсе функции и указатели функций __clrcall если не указано иное.

Перед в выпусках Visual C++ 2005 thiscall соглашение о вызове не может быть явно указано в программе, поскольку thiscall не является ключевым словом.

vararg функции-члены используют __cdecl соглашение о вызовах.Все аргументы функции помещаются в стек, с this указатель помещенный в последнем стека

Поскольку это соглашение о вызове применяется только к C++, схема оформление имен на c#.

Для семейства процессоров Itanium (IPF) и x64 компьютеры, __thiscall принимает и не обрабатывается компилятором. на обломоке IPF, по соглашению параметры передаются в регистр.

Для non-статических функций класса, если указанная функция вне линия, вызывающий модификатор соглашения не обязательно должен быть определен в определении вне линии.То есть для методов члена класса non-статических, соглашением о вызове, указанное во время объявления принято с точки зрения определения.

Пример

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

См. также

Ссылки

Передача и соглашения об именовании аргумента