Your Windows application must have an entry-point function that is called when the application starts running. As a C/C++ developer, there are two possible entry-point functions you can use:
int WINAPI _tWinMain(
HINSTANCE hInstanceExe,
HINSTANCE,
PTSTR pszCmdLine,
int nCmdShow);
int _tmain(
int argc,
TCHAR *argv[],
TCHAR *envp[]);
Notice that the exact symbol depends on whether you are using Unicode strings or not. The operating system doesn't actually call the entry-point function you write. Instead, it calls a C/C++ run-time startup function implemented by the C/C++ run time and set at link time with the -entry: command-line option. This function initializes the C/C++ run-time library so that you can call functions such as malloc and free. It also ensures that any global and static C++ objects that you have declared are constructed properly before your code executes. Table 4-1 tells you which entry point to implement in your source code and when.
Application Type
Entry Point
Startup Function Embedded in Your Executable
GUI application that wants ANSI characters and strings
_tWinMain (WinMain)
WinMainCRTStartup
GUI application that wants Unicode characters and strings
_tWinMain (wWinMain)
wWinMainCRTStartup
CUI application that wants ANSI characters and strings
_tmain (Main)
mainCRTStartup
CUI application that wants Unicode characters and strings
_tmain (Wmain)
wmainCRTStartup
Table : Application Types and Corresponding Entry Points