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


__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, ...);

См. также

Ссылки

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

Ключевые слова C++