我已经开始在C学习Win32 API了。 我看到主要功能类似于
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) { .. }
但我知道C中的函数就像
[ReturnType] [FunctionName] (Args) { .. }
在这种情况下,返回类型为int,函数名称为WinMain。 那么WINAPI代表什么是必要的呢?
谢谢。 :)
答案 0 :(得分:13)
它指定了calling convention,这是函数的参数在堆栈上的放置和管理方式。
你可以混合使用调用约定,比如你是否正在调用一些外部代码,比如windows API,只要每个人都与他们的期望在同一个“页面”上。
使用所谓的cdecl编译典型的c调用。在cdecl中,调用者清理堆栈上推送的参数。
WINAPI,也称为“标准调用”,意味着被调用函数负责清理其参数堆栈。
MS编译器将使用_作为cdecl调用的前缀,而WINAPI获取前导_并在函数名称变形时获得函数名称前面的@ {BYTES-NEEDED}。从上面的链接:
call _sumExample@8 ;WINAPI
call _someExample ;cdecl
答案 1 :(得分:3)
调用约定",定义为#define
的宏并解析为__stdcall
。
了解更多on MSDN:
名称的装饰方式取决于语言和方式 指示编译器使该函数可用,即 召集会议。标准的进程间调用约定 DLL使用的Windows称为WinAPI约定。它是定义的 在Windows头文件中作为WINAPI,后者又使用 Win32声明符__stdcall。
答案 2 :(得分:-3)
赢 - Windows
API - 应用程序编程接口
Windows应用程序编程接口