在linux _start()中是触发main()函数的程序集函数。
Windows里有什么?我不知道我的问题是对是错?
实际上,我试图在Linux中使用_start() --工作正常。但是DevC++(windows)中的相同代码
链接器错误未定义为“`WinMain@16”的引用
发布于 2018-05-04 00:51:22
Windows使用函数WinMain()作为入口点,该函数作为以下声明:
int CALLBACK WinMain(HINSTANCE hInstance,
HINSTANCE hPreviousInstance,
LPSTR lpszCmdLine,
int nCmdShow);我将试着解释一下WinMain()的基本知识。
要理解这些HINSTANCE类型意味着什么,我们必须使用与文件的类比。当您使用经典的syscall (open ())打开一个文件时,您会得到一个名为文件描述符的整数值。但在微软的术语中,这被称为句柄,或者说英语。大多数Windows API函数都与句柄一起工作,它们是对可以在Windows中使用的对象的引用。
句柄与文件描述符完全一样。它们是数值,它没有特殊的意义(例如,它们不是指向对象的指针),只是值本身.
例如:一个进程有一个与其实例(HINSTANCE)对应的句柄。注意,同一个进程可以运行不止一次(您可以从同一个应用程序打开两个窗口-例如,尝试记事本)。因此,正在执行的实例的“句柄”被传递给WinMain in hInstance,上面.第二个“句柄”,hPreviousInstance,仅仅是历史.在Win16中,API进程被放在一个列表中,并在hPreviousInstance中报告了应用程序的前一个实例的句柄.在Win32之后,这个参数总是获得NULL (或0)。
我们的入口点被赋予一个指向包含命令行的字符串的简单指针,而不是获得一个参数列表(与argv数组一样,在main ()函数中)。LPSTR类型可以理解为“指向STRing的长指针”(char*)。这里的“长”一词也具有历史意义。
第四个参数是Windows发送给应用程序的常量,通知它用户希望第一个窗口显示的方式(或者它最初是否会被隐藏!)通常使用的常量是SW_SHOW。这里有一个解释: Windows头文件定义符号常量的“刻度”(通用大小),其中许多是位图,也就是说,它们可以通过OR运算符“添加”到其他文件中。
WinMain ()函数将返回一个应该为0的整数值或来自WM_QUIT消息的一个值(稍后我将解释).也就是说,这个值通常是0,它与"ERRORLEVEL“在DOS中学到的东西无关。Windows不处理ERRORLEVEL。
https://stackoverflow.com/questions/23980256
复制相似问题