Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Соглашение о вызовах, определенное корпорацией__thiscall Майкрософт, используется в функциях-членах класса C++ в архитектуре x86. Это соглашение о вызовах по умолчанию, используемое функциями-членами, которые не используют аргументы переменных (vararg функции).
В разделе __thiscallвызываемого абонента очищается стек, что невозможно для vararg функций. Аргументы отправляются в стек справа налево. Указатель this передается через регистр ECX, а не на стеке.
На компьютерах __thiscall ARM, ARM64 и x64 принимается и игнорируется компилятором. Это связано с тем, что они используют соглашение о вызове на основе регистрации по умолчанию.
Одна из причин использования __thiscall — это классы, функции-члены которых используются __clrcall по умолчанию. В этом случае можно использовать __thiscall для вызова отдельных функций-членов из машинного кода.
При компиляции со /clr:pureвсеми функциями и указателями функций не __clrcall указаны в противном случае.
/clr:pure Параметры /clr:safe компилятора устарели в Visual Studio 2015 и не поддерживаются в Visual Studio 2017.
vararg функции-члены используют __cdecl соглашение о вызовах. Все аргументы функции отправляются в стек, а this указатель помещается в стек последний.
Так как это соглашение о вызове применяется только к C++, оно не имеет схемы оформления имен C.
При определении функции-члена класса, отличной от статического класса, укажите модификатор соглашения о вызове только в объявлении. Вам не нужно снова указывать его в определении вне строки. Компилятор использует соглашение о вызовах, указанное во время объявления в точке определения.