_start()的对应部分

时间:2014-06-01 13:13:47

标签: c linux windows

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

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

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

  

[链接器错误]未定义引用`WinMain @ 16'

1 个答案:

答案 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