【发布时间】:2020-08-30 15:39:54
【问题描述】:
我已经阅读了很多关于如何更改 WinMain 入口点过程的内容,有人说您可以从链接器更改入口点,而另一些人说您可以将 WinMain 放入 DLL (dllMain) 和以此类推。
老实说,我很困惑。我相信有一种或多种方法可以将入口点过程更改为自定义过程,因为有些例子像 MFC 没有直接的WinMain 函数,Qt 框架也有一个自定义入口点过程,它类似于控制台应用程序main 函数int main(int argc, char *argv[]),所以,有我所期望的方法。
我想要一种任何方式来替换/更改 Windows 上 GUI 应用程序的入口点过程,从传统的程序 WinMain 到 int main(int argc, char *argv[]),如 Qt 甚至任何其他自定义函数,但它必须与(MS、GCC , Clang) 编译器。
///////////Windows main/////////////
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow){
}
///////////Console main and Qt framework////////////
int main(int argc, char *argv[]) {
}
//////////MFC////////////
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {}
};
class CExample : public CWinApp {
BOOL InitInstance() {}
};
CExample theApp;
我该怎么做?
【问题讨论】:
-
使用
main或WinMain以外的东西会很棘手,因为这些是运行时库在完成初始化后调用的入口点。 MSVC 链接器确实允许您在命令行上指定入口点(请参阅here,但那样会绕过运行时库初始化代码并破坏您的应用程序。 -
我想要一种任何方式来替换/更改 Windows 上 GUI 应用程序的入口点过程 - 感觉?你想得到什么?这是干什么用的?
-
@RbMm:我正在尝试创建一个 GUI 库,但我不想让库变得复杂,所以我想让入口点成为用户熟悉的东西,例如
int main(int argc, char *argv[])函数int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow). -
@LionKing - 如果说真的,我根本不了解你。
main或WinMain有什么不同?一些用户在这里是如何相关的,为什么 lib 完全实现入口点.. 但是如果你理解我的回答,你想要做的很容易 -/ENTRY: mainCRTStartup- 这很明显 -
在您的 GUI 库中包含一个 WinMain 函数,该函数执行任何操作,然后调用您未实现的名为 main 的函数。然后当库的用户创建一个 main 函数时,它就可以工作了。然后加载程序只需调用您的 WinMain 函数而无需任何特殊调味料。主要的是库的用户需要将他们的程序编译为 Windows 可执行文件而不是控制台程序,以便调用 WinMain。
标签: c++ windows user-interface