【问题标题】:Where is WinMain() in Win32 API implemented?Win32 API 中的 WinMain() 在哪里实现?
【发布时间】:2020-07-19 06:14:43
【问题描述】:

只是想知道Win32 API 中的WinMain() 方法在哪里实现。 我知道WinMain() 是在WinBase.h 中声明的,但是当应用程序运行时,它在哪里引用WinMain() 函数的主体?

【问题讨论】:

    标签: windows winapi winmain


    【解决方案1】:

    由程序编写者来实现它。与在非 Windows 环境中实现 main() 的要求类似。

    【讨论】:

      【解决方案2】:

      WinMain 的文档解释了它是什么:

      基于 Windows 的图形应用程序的用户提供的入口点。

      在SDK中声明,但需要程序作者实现。

      创建新进程时,操作系统会调用可执行映像的导出入口点。默认情况下,这是 C 运行时 (CRT) 的入口点 (WinMainCRTStartup),它在将控制权转移到用户提供的入口点 WinMain 之前准备执行环境。这是第一个执行的用户编写的代码。


      您可以在WinMain is just the conventional name for the Win32 process entry point 找到有关在 Windows 上启动可执行文件时发生的情况的更多信息。

      Matt Godbolt 也有一个 CppCon 2018 演讲,标题为 The Bits Between the Bits: How We Get to main(),详细解释了在用户编写的第一行代码执行之前发生的情况。它特定于 Linux,但原则也适用于 Windows。

      【讨论】:

      • "这是第一个执行的用户编写的代码" - 应该注意的是,可以编写运行之前的用户代码WinMain()/main() 被调用。例如,在 C++ 中,使用全局对象的构造函数。或#pragma startup 回调函数。
      • @rem:Raymond Chen 引用的文章中已经提到了这一点(“例如,C++ 语言启动代码将在调用WinMain 之前运行全局构造函数”)。
      猜你喜欢
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 2016-08-19
      相关资源
      最近更新 更多