_start() 的对应物

标签 c linux windows

linux _start()中是触发main()函数的汇编函数。

Windows 中有什么? 我不确定我的问题是对还是错?

实际上我正在尝试在 Linux 中使用 _start() - 工作正常。 但是 DevC++(windows) 中的代码相同

[Linker error] undefined reference to `WinMain@16'

最佳答案

Windows 使用函数 WinMain() 作为入口点,声明如下:

int CALLBACK WinMain(HINSTANCE hInstance, 
                     HINSTANCE hPreviousInstance, 
                     LPSTR lpszCmdLine, 
                     int nCmdShow);

我将尝试向您解释 WinMain() 的基础知识。

要理解这些 HINSTANCE 类型的含义,我们必须求助于文件类比。当您使用经典的 系统调用 (open ()) 打开文件时,您会得到一个称为文件描述符的整数值。但在微软的命名法中,这叫做句柄,或者英文。大多数 Windows API 函数都使用句柄​​,它们是对可在 Windows 中使用的对象的引用。

句柄与文件描述符完全一样。它们是除了值本身之外没有特殊含义的数值(例如,它们不是指向对象的指针)...

例如:一个进程有一个对应于它的实例的句柄(HINSTANCE)。请注意,同一个进程可以运行多次(您可以从同一个应用程序打开两个窗口 - 例如,试试记事本)。所以正在执行的实例的“句柄”被传递给hInstance中的WinMain,上面...第二个“句柄”,hPreviousInstance,仅仅是历史的...在Win16 API 进程被放置在一个列表中,并且在 hPreviousInstance 中报告了应用程序的前一个实例的句柄......在 Win32 之后,这个参数将始终为 NULL(或 0)。

我们的入口点不是获取参数列表(与 argv 数组一样,在 main () 函数中),而是提供一个指向包含命令行的字符串的简单指针。 LPSTR 类型可以理解为“Long Pointer to STRing”,即“char *”……这里的“long”一词也是历史悠久的。

第四个参数是 Windows 发送给应用程序的常量,通知它用户希望如何显示第一个窗口(或者它是否会在最初隐藏!)...通常使用的常量是 SW_SHOW 。这里有一个解释:Windows 头文件定义了符号常量的“刻度”(量级的通用度量),其中许多是位图,也就是说,它们可以通过 OR 运算符“添加”到其他。

WinMain() 函数会返回一个应该为 0 的整数值或 WM_QUIT 消息中的一个值(稍后我会解释)... 那就是,通常此值将为 0,并且与在 DOS 中学到的“ERRORLEVEL”无关...Windows 不处理 ERRORLEVEL

关于_start() 的对应物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980256/

相关文章:

c - RPC windows获取客户端IP地址

php - 如何使用 bash 脚本从某个特定网站(例如 XYZ.com wesbite)获取 ip 列表

windows - 如何从 Powershell 调用 GetStdHandle、GetConsoleMode?

c - c中的自引用结构

c - 如何从头开始使用 C 编写 Web 浏览器

linux - 无需通过 ssh 连接到本地主机即可启动 Hadoop

关于 printf() long unsigned int 和 uint32_t 的编译器警告

windows - 如何防止java.exe安装在Windows的system32中?

c - 计算矩阵中行和列的最简单方法

c - BGLIB SiliconLabs 代码错误?