在 Win32 程序中用 main() 函数替换 WinMain()

Replacing WinMain() with main() function in Win32 programs(在 Win32 程序中用 main() 函数替换 WinMain())
本文介绍了在 Win32 程序中用 main() 函数替换 WinMain()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我在 StackOverflow 和 Google 上搜索了一点,但没有找到这个想法.我想用这种类型的用户编程来启动我的应用程序:

I searched a little bit on StackOverflow and Google but couldn't get the idea. I want to start my application with this type of user programming:

int main()
{
  Window App("Test", 640, 480);

  while(App.IsOpen())
  {
    // Do the stuff
  }
}

但这是不可能的,因为我应该将 hInstancehPrevInstance 和其他参数传递给 WinMain 函数.实际上,我设计了一个 Window 类,使窗口创建更容易一些.我在 SFML 上看到了这个实现,但我不知道它是怎么做到的.

But this isn't possible because I should pass the hInstance and hPrevInstance and other parameters to a WinMain function. Actually there is a Window class which I designed to make the window creation a little bit easier. I saw this implementation on SFML but I don't know how it did come to this.

现在我使用的是通常的方式:

Right now I'm using the usual way:

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR, int)
{
  Window App(hInst, hPrevInst, "Test", 640, 480);

  while(App.IsOpen())
  {
    // Do the stuff
  }
}

谢谢.

推荐答案

您可以在windows"中使用标准的 main应用程序(即 GUI 子系统 Windows 应用程序),即使使用 Microsoft 工具,如果您将以下内容添加到 Microsoft 链接器选项:

You can use standard main in a "windows" app (that is, a GUI subsystem Windows application) even with the Microsoft tools, if you add the following to the Microsoft linker options:

/subsystem:windows /ENTRY:mainCRTStartup

请注意,这对于 GNU 工具链来说不是必需的.

Note that this is not necessary for the GNU toolchain.

对于 Microsoft 工具,您也可以将其添加到主文件中:

Still for the Microsoft tools you can alternatively add this to your main file:

#ifdef _MSC_VER
#    pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endif

James McNellis 告诉您如何获取 hInstance.

James McNellis tells you how to get the hInstance.

这篇关于在 Win32 程序中用 main() 函数替换 WinMain()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Prevent class inheritance in C++(防止 C++ 中的类继承)
Why should I declare a virtual destructor for an abstract class in C++?(为什么要在 C++ 中为抽象类声明虚拟析构函数?)
Why is Default constructor called in virtual inheritance?(为什么在虚拟继承中调用默认构造函数?)
C++ cast to derived class(C++ 转换为派生类)
C++ virtual function return type(C++虚函数返回类型)
Is there any real risk to deriving from the C++ STL containers?(从 C++ STL 容器派生是否有任何真正的风险?)