【问题标题】:WinMain not called before main (C/C++ Program Entry Point Issue)在 main 之前未调用 WinMain(C/C++ 程序入口点问题)
【发布时间】:2010-04-12 05:23:12
【问题描述】:

我的印象是这段代码

#include <windows.h>

#include <stdio.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    printf("WinMain\n");

    return 0;
}

int main()
{
    printf("main\n");

    return 0;
}

会输出 WinMain,但当然没有任何东西可以按照您的预期工作。

无论如何,有人可以告诉我如何让这个程序首先运行 WinMain(我确实有理由同时使用两者)。如果有帮助的话,我正在使用 mingw 运行 Windows 7。

【问题讨论】:

  • 你对“之前”的使用让我相信你认为一个主要的将被调用,然后另一个。但只有一个主线。 (有两个主要的没有意义。)
  • 对不起,语言不好。我不打算一次使用它们(这意味着对我的智力水平的某种看法,我不喜欢,哦,好吧)。我打算稍后将 main 注入 WinMain。

标签: c++ c winapi winmain


【解决方案1】:

调用 MinGw 时需要在命令行中输入-mwindows。查看this,作为使用 MinGW 进行 Windows 编程的简要介绍。

另外:你不能在一个可执行文件中有两个入口点,所以你可能无法做你想做的事情。

【讨论】:

  • 抱歉没用。我将代码更改为 printf("main\n"); MessageBox (NULL, TEXT ("main"), TEXT ("main"), 0) ;返回0; 在 main 中,猜猜谁出现了。我希望你是不正确的,因为我已经看到它使用 SDL 和类似的库完成,我只是不确定有什么不同。
  • @BT:不,你不能有两个电源。这没有意义。为什么你认为你需要两个电源?
  • @BT:您可以定义这两个主要函数,但只能调用其中一个。
  • @GMan:我试图制作一个简单的 GUI 库,它会在 WinMain 启动期间向用户隐藏大部分代码,并在一切启动后使用用户提供的 main。这只会使代码更清晰并减少混乱(相信我)。至于两个电源,那不是我正在尝试的。我试图让入口点 WinMain(由我编程)然后调用 main(由库用户编程 - 最像我)。
  • @BT:确实如此。如果使用-mwindows 编译,则选择WinMain,否则使用经典的main 函数。如果使用 UTF8 编译,它将选择 main 函数和 wchar_t。但是每个编译的二进制文件只有一个入口点。
【解决方案2】:

编译器将根据您是将编译后的输出定位到 Windows 子系统还是控制台子系统来选择一个入口点或另一个。前者为WinMain,后者为main

【讨论】:

    【解决方案3】:

    刚刚找到这个解决方法,感觉有点愚蠢。

    #define main USER_Main
    

    这使得 main 成为程序入口点,同时仍然向用户隐藏了任何东西都被弄乱的事实。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-23
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多