没有WinMain的winapi入口点

时间:2016-08-08 14:50:25

标签: c++ winapi visual-studio-2015

所以通过我在网上找到的winapi程序来源,我发现在任何地方都没有WinMain,我想知道是否有可能让winapi程序像这样工作,为什么你认为原来的程序员做了类似的事情这个,我们有这样的对话程序:

 static INT_PTR CALLBACK mainDialogProc(HWND hwnd, UINT msg, WPARAM wParam,
     LPARAM lParam)
{
 switch(msg)
  {
    case WM_INITDIALOG:
   {
    //..............   
   }
  }
}

并且主入口点是这样的,而不是void WINAPI WinMain(void);

void WINAPI entryPoint(void)
{
 //........
}

这真的有可能吗?它违背了我迄今为止所研究的所有内容...... 我真的很确定我错过了什么......

3 个答案:

答案 0 :(得分:6)

通过链接器设置/ENTRY指定可执行映像的入口点。如果未明确设置,则控制台应用程序默认为mainCRTStartup(或wmainCRTStartup,GUI应用程序为WinMainCRTStartup(或wWinMainCRTStartup),_DllMainCRTStartup对于DLL。使用作为Visual Studio一部分提供的CRT时,所有上述原始入口点都会调用用户提供的入口点main(或wmain),WinMain(或{{ 1}})和wWinMain分别。这是在 crt0.c 中实现的,它作为Visual Studio的CRT源代码的一部分提供。

如果您提供自己的入口点(通过指定DllMain链接器选项),它必须具有以下签名(对于32位应用程序):

/ENTRY

<小时/> 额外奖励:WinMain is just the conventional name for the Win32 process entry point

答案 1 :(得分:0)

您可以使用/ENTRY:"entryPoint"链接器选项设置任意入口点。

答案 2 :(得分:0)

它主要依赖于编译器,但是&#34;入口点&#34;可执行文件是通过适当的选项在链接器中声明的函数。 WinMainCRTStarup只是默认值,在初始化默认库之后调用WinMain

无论如何,这样编写的代码可能被定义为自包含,并且您可以从自己的enrypoint调用WinMain,在那里您也可以执行任何其他操作。