__stdcall
Только для систем Microsoft
__stdcall соглашение о вызовах используется для вызова функции api-интерфейса Win32.Вызываемый объект очищает стек, поэтому компилятор делает vararg функции __cdecl.Функции, использующие это соглашение о вызове требуется прототипа функции.
return-type __stdcall function-name[(argument-list)]
Заметки
В следующем списке показана реализация этого соглашения о вызовах.
Элемент |
Реализация |
---|---|
порядок Аргумент-проходить |
Справа налево. |
Аргумент-проходить о вызовах |
Значение, если указатель или ссылочным типом, не передаются. |
ответственность за Стек-обслуживания |
Вызываемая функция извлекает собственные аргументы из стека. |
соглашение Имя-украшения |
Символ подчеркивания (_) присоединен префикс имени.Имя за которым следует знак " @ ", за которым следует число байтов (в десятичном числе) в списке аргументов.Поэтому функция, объявленная как int func( int a, double b ) оформляет следующим образом: _func@12 |
соглашение Обращение-перевода |
None |
/Gz определяет параметр компилятора __stdcall для всех функций явно объявленных не с другим в соответствии с соглашением вызова.
Функции, объявленные с помощью __stdcall возвращаемые значения модификатора таким же образом, как в котором объявлен с помощью функции __cdecl.
Для семейства процессоров Itanium (IPF) и процессорах x64 __stdcall принимает и не обрабатывается компилятором. на IPF, по соглашению параметры передаются в регистр.
Для non-статических функций класса, если указанная функция вне линия, вызывающий модификатор соглашения не обязательно должен быть определен в определении вне линии.То есть для методов члена класса non-статических, соглашением о вызове, указанное во время объявления принято с точки зрения определения.Учитывая это определение класса
struct CMyClass {
void __stdcall mymethod();
};
this
void CMyClass::mymethod() { return; }
аналогичен этому
void __stdcall CMyClass::mymethod() { return; }
Пример
В следующем примере использованиеstdcall во всех результатов WINAPI типы функций обрабатывается как обычный вызов.
// Example of the __stdcall keyword
#define WINAPI __stdcall
// Example of the __stdcall keyword on function pointer
typedef BOOL (__stdcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);