что по WinAPI подставка для
Я начал изучать Win32 API в C.
Я видел, что основная функция-это что-то вроде
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) { .. }
Но я знаю, что функция в C похожа на
[ReturnType] [FunctionName] (Args) { .. }
В этом случае тип возвращаемого значения-int, а имя функции-WinMain.
Так что же означает WINAPI и является ли это необходимым?
Спасибо . :)
3 ответов:
Он определяет Соглашение о вызове, которое является способом размещения аргументов функций и управления ими в стеке.
Вы можете смешивать соглашения о вызовах, скажем, если вы вызываете какой-то внешний код, например API windows, пока все находятся на одной "странице" со своими ожиданиями.
Типичные вызовы c компилируются с использованием так называемого cdecl. В cdecl вызывающий объект очищает аргументы, помещенные в стек.
WINAPI, также известный как "стандартный вызов", означает, что вызываемая функция отвечает за очистку стека своих аргументов.
Компилятор MS префиксует вызов cdecl с_, в то время как WINAPI получает ведущий _ и получает @{BYTES-NEEDED} перед именем функции, когда он искажает имена функций. По ссылке выше:
call _sumExample@8 ;WINAPI call _someExample ;cdecl
Это "соглашение о вызове", определяемое как макрос с
#defineи разрешается в__stdcall.Подробнее на MSDN :
Способ оформления имени зависит от языка и того, как компилятору дается указание сделать функцию доступной, т. е. соглашение о вызовах. Стандартное соглашение о вызовах между процессами для Windows, используемая библиотеками DLL, известна как соглашение WinAPI. Она определена в заголовочных файлах Windows как WINAPI, который в свою очередь определяется использование Win32 declarator _ _ stdcall.
Win-Windows
API-интерфейс прикладного программирования
Интерфейс Прикладного Программирования Windows
Comments