Win32控制台应用程序的正确入口点是什么?

时间:2016-07-14 01:50:13

标签: c++ winapi unicode

我目前正在开发Windows 10的控制台应用程序,我想知道main()入口点应该是什么。

在Jeffrey Richter和Christophe Nasarre的“Windows via C / C ++”(2007年)第69页中,它指出:

  

您的Windows应用程序必须具有入口点功能...作为C / C ++开发人员,您可以使用两种可能的入口点功能:

int WINAPI _tWinMain(HINSTANCE hInstanceExe, HINSTANCE, PTSTR pszCmdLine, int nCmdShow);

int _tmain(int argv, TCHAR *argv[], TCHAR *envp[]);

本书接着确定这两个入口点实际上是由编译器映射到不同的入口点,具体取决于应用程序是GUI还是Console,以及是否使用了Unicode。

我想使用Unicode的Win32控制台应用程序的正确入口点,所以我假设(?),我想要_tmain版本,但是当我在Visual Studio 2015 Community Edition中打开一个新项目并选择“ “Win32控制台应用程序”,然后选择“控制台应用程序”,我最终得到了main(),就像我习惯在Linux下一样:

int main()

我应该使用哪个入口点?

1 个答案:

答案 0 :(得分:-2)

第一个入口点(或变体)通常用于GUI过程:

int WINAPI _tWinMain(HINSTANCE hInstanceExe, HINSTANCE, PTSTR pszCmdLine, int nCmdShow);

第二个入口点(或变体)通常用于命令行过程:

int _tmain(int argv, TCHAR *argv[], TCHAR *envp[]);

使用/ ENTRY链接器选项设置入口点。 Visual Studio在您创建GUI /控制台项目时为您设置此项,并且通常您不需要更改它。请参阅:https://msdn.microsoft.com/en-us/library/f9t8842e.aspx

使用tchar.h时,通常会使用_T前缀。这允许应用程序(理论上)可以轻松编译为“Ansi”或Unicode。您可以在之前的答案中阅读更多相关信息:

What is the difference between _tmain() and main() in C++?