没有WinMain的winapi入口点
winapi entry point without WinMain
所以通过一个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)
{
//........
}
这真的可能吗?它违背了我迄今为止所学的一切……
可执行映像的入口点是通过链接器设置/entry指定的。如果没有显式设置,则默认为控制台应用程序的mainCRTStartup
(或wmainCRTStartup
), GUI应用程序的WinMainCRTStartup
(或wWinMainCRTStartup
)和DLL的_DllMainCRTStartup
。当使用Visual Studio自带的CRT时,前面提到的所有原始入口点分别调用用户提供的入口点main
(或wmain
)、WinMain
(或wWinMain
)和DllMain
。这是在crt0.c中实现的,它是Visual Studio的CRT源代码的一部分。
如果您提供自己的入口点(通过指定/ENTRY
链接器选项),它必须具有以下签名(对于32位应用程序):
DWORD CALLBACK RawEntryPoint(void);
附加说明:WinMain只是Win32进程入口点的常规名称
它主要依赖于编译器,但可执行文件的"入口点"是在链接器中通过适当的选项声明的函数。WinMainCRTStarup
只是默认的,在初始化默认库之后,它调用WinMain
。
无论如何,像这样编写的代码可能被定义为自包含的,其想法是您将从自己的WinMain
调用enrypoint
,在那里您还可以做任何其他事情。
您可以使用/ENTRY:"entryPoint"
链接器选项来设置任意入口点
- WinAPI挂钩鼠标
- 将执行、作业和WinAPI相乘
- 如何在桌面C++上使用 WinApi 画线
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- Winapi:屏幕截图未显示在窗口中
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- Qt with WinAPI MouseProc
- 如何在"SUBSYSTEM:WINDOWS"下显示并输出到Windows(C++ WinApi)上的
- WinAPI 无法创建按钮
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- WinAPI 检查窗口是否具有常规标题栏
- 修改程序的入口点时未调用全局变量的构造函数
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 将Qt集成到现有的VS项目中以取代WinAPI
- __stdcall - WINAPI vs STDMETHODCALLTYPE vs APIENTRY
- 如何将'this'指针传递给C++ WinAPI 线程?
- Winapi-WM_CLOSE的替代方案
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- 函数声明中的 WINAPI 标识符C++ DLL 入口点函数中的标识符
- 没有WinMain的winapi入口点