【问题标题】:Calling WinMain from other functions从其他函数调用 WinMain
【发布时间】:2014-05-26 10:07:01
【问题描述】:

所以我有一个 .cpp 文件,其中包含例如函数:drawLine()、drawSquare() 和 main()。在 main() 中,我想调用函数(来自其他文件),该函数使用 WinApi 创建一个窗口,然后调用 drawLine() 和 drawSquare() 在该窗口中绘制一些图形。如果它看起来像这样(仅声明),我该如何调用这个 WinMain():

int WINAPI WinMain (HINSTANCE hThisInstance,
                HINSTANCE hPrevInstance,
                LPSTR lpszArgument,
                int nFunsterStil) 

还有一件事。这个创建窗口必须在 WinMain 中还是有办法将指令放在常规函数中?

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

    问。如果看起来像这样(仅声明),我该如何调用这个 WinMain()?

    • 这些参数对于您的 GUI 应用程序的工作不是必需的。尝试这样做:

    WinMain(0, 0, 0, 0);

    问。这个创建窗口必须在 WinMain 中还是有办法将指令放在常规函数中?

    • WinMain 只是入口点。你可以把它放在你想要的任何地方...

    --

    您的设置似乎有点混乱。据我所知,您实际上并不需要 WinMain... 只需调用 Windows API 函数即可创建您的 Window。

    【讨论】:

      【解决方案2】:

      main 是控制台应用程序的入口点。

      WinMain 用于 GUI 应用程序。

      您的项目应该只有其中之一,句号。

      您可以将窗口创建代码放在任何地方;它不需要在WinMain

      【讨论】:

        【解决方案3】:

        WinMain 是入口点,必须像它一样命名(就像 c 中的 main 一样)。 AFAIK 无法重命名此函数。从另一个文件调用这个函数可能会起作用,但这通常不做也不应该做,因为只有 windows os 是所有 WinMain 函数的合法调用者。

        【讨论】:

        • 您可以重命名此函数(= 更改入口点名称)。使用 /entry 开关告诉链接器它应该使用另一个入口点。
        • 哇,没听说过。谢谢澄清。
        • 你们都错了。 WinMain 这个名字实际上只是一个约定,它也不是入口点。默认情况下,入口点是WinMainCRTStartupwWinMainCRTStartup。这是 CRT 执行所有启动代码的地方。然而,CRT 要求“入口点”实际上称为WinMainwWinMain。如果你不使用 CRT,你可以使用任何你喜欢的名字。
        猜你喜欢
        • 1970-01-01
        • 2013-07-20
        • 2013-01-12
        • 2021-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多