在linux _start()
中是汇编函数,它触发main()
函数。
Windows中的内容是什么? 我不确定我的问题是对还是错?
实际上我正在尝试在Linux中使用_start() - 工作正常。 但是DevC ++(windows)中的相同代码
[链接器错误]未定义引用`WinMain @ 16'
答案 0 :(得分:-1)
Windows将函数WinMain()用作入口点,如以下声明:
int CALLBACK WinMain(HINSTANCE hInstance,
HINSTANCE hPreviousInstance,
LPSTR lpszCmdLine,
int nCmdShow);
我将尝试向您解释WinMain()
的基础知识。
要了解这些HINSTANCE
类型的含义,我们必须采用与文件类比。使用经典syscall (open ())
打开文件时,会得到一个称为文件描述符的整数值。但在微软的命名法中,这被称为句柄或英语。大多数Windows API函数都使用句柄,它们是对可以在Windows中使用的对象的引用。
句柄与文件描述符完全相同。它们是没有特殊含义的数值(例如,它们不是指向对象的指针),而不是值本身......
例如:进程具有与其实例(HINSTANCE
)对应的句柄。请注意,相同的进程可以运行多次(您可以从同一个应用程序打开两个窗口 - 例如,尝试使用记事本)。因此,正在执行的实例的“句柄”被传递到WinMain
中的hInstance
,上面......第二个“句柄”,hPreviousInstance,仅仅是历史性的......在Win16 API中,进程被放置了在hPreviousInstance
中报告了列表和应用程序的上一个实例的句柄...在Win32以后,此参数将始终为NULL(或0)。
不是获取参数列表(与main()函数中的argv数组一样),而是给出一个指向包含命令行的字符串的简单指针。 LPSTR
类型可以理解为“长指针”,即“char *”......此处的“long”一词也是历史性的。
第四个参数是Windows发送给应用程序的常量,通知它用户希望如何显示第一个窗口(或者它最初是否会被隐藏!)...通常使用的常量是{{1} }。这里有一个解释:Windows头文件定义符号常量的“tick”(通用度量),其中许多是位图,也就是说,它们可以通过OR运算符“添加”给其他人。
SW_SHOW
函数将返回一个应为0的整数值或WinMain ()
消息中的值(稍后我将解释)...也就是说,通常此值为0且它与“WM_QUIT
无关”在DOS中学到了... Windows不处理ERRORLEVEL
。