12

我已经开始在 C 中学习 Win32 API。我看到 main 函数类似于

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) { .. }

但我知道 C 中的函数就像

[ReturnType] [FunctionName] (Args) { .. }

在这种情况下,返回类型是 int,函数名称是 WinMain。那么WINAPI代表什么,有必要吗?

谢谢你 。:)

4

3 回答 3

15

它指定了调用约定,即函数参数在堆栈上的放置和管理方式。

您可以混合调用约定,例如,如果您正在调用一些外部代码,例如 Windows API,只要每个人都在同一个“页面”上,都符合他们的期望。

典型的 c 调用是使用所谓的 cdecl 编译的。在 cdecl 中,调用者清除压入堆栈的参数。

WINAPI,也称为“标准调用”,是指被调用的函数负责清理其参数的堆栈。

MS 编译器将使用 _ 作为 cdecl 调用的前缀,而 WINAPI 获取前导 _ 并在破坏函数名称时在函数名称前添加 @{BYTES-NEEDED}。从上面的链接:

call        _sumExample@8  ;WINAPI
call        _someExample   ;cdecl
于 2012-11-19T22:27:53.313 回答
4

它是“调用约定”,定义为宏,#define并解析为__stdcall.

在 MSDN 上阅读更多信息:

名称的修饰方式取决于语言以及编译器如何被指示使函数可用,即调用约定。DLL 使用的 Windows 的标准进程间调用约定称为 WinAPI 约定。它在 Windows 头文件中定义为 WINAPI,而后者又使用 Win32 声明符 __stdcall 定义。

于 2012-11-19T22:24:47.537 回答
-9

赢 - Windows

API - 应用程序编程接口

Windows 应用程序编程接口

于 2013-11-23T18:41:37.850 回答