【问题标题】:what does WINAPI stand forWINAPI 代表什么
【发布时间】:2012-11-07 22:31:12
【问题描述】:

我已经开始学习 C 语言中的 Win32 API。 我看到主要功能是这样的

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

但我知道 C 中的函数就像

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

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

谢谢。 :)

【问题讨论】:

    标签: c windows api winapi winmain


    【解决方案1】:

    它指定了calling convention,这是函数参数在堆栈上的放置和管理方式。

    您可以混合调用约定,例如,如果您要调用一些外部代码(如 Windows API),只要每个人都在同一个“页面”上进行预期。

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

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

    MS 编译器会在 cdecl 调用前加上 _,而 W​​INAPI 会在函数名称前添加一个 _ 并在函数名称前添加一个 @{BYTES-NEEDED}。从上面的链接:

    call        _sumExample@8  ;WINAPI
    call        _someExample   ;cdecl
    

    【讨论】:

      【解决方案2】:

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

      阅读更多on MSDN

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

      【讨论】:

        【解决方案3】:

        Win - Windows

        API - 应用程序编程接口

        Windows 应用程序编程接口

        【讨论】:

        • 这个问题是关于 WINAPI 调用约定而不是关于术语本身。
        猜你喜欢
        • 1970-01-01
        • 2019-06-23
        • 2021-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2013-12-26
        相关资源
        最近更新 更多