所以通过我在网上找到的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)
{
//........
}
这真的有可能吗?它违背了我迄今为止所研究的所有内容...... 我真的很确定我错过了什么......
答案 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
,在那里您也可以执行任何其他操作。