【问题标题】:Overloading WinMain() function while using Unicode character set使用 Unicode 字符集时重载 WinMain() 函数
【发布时间】:2011-12-31 00:18:04
【问题描述】:

如何在 Visual Studio 中使用 Unicode 字符集时重载 WinMain() 函数?谢谢。

Here's the code i am talking about

【问题讨论】:

  • 过载WinMain()?什么?为什么?这似乎很糟糕。
  • 我正在尝试编写游戏引擎,据我所知,这是一种常见的做法。
  • 出于什么目的?你想让我做什么?考虑到它只被调用一次作为入口点,我认为这没有实际用途。也许您正在寻找 _tWinMain 这是 TCHAR 版本,以防您想编译为 Unicode 或 ANSI char?
  • 使用wWinMain(),_tWinMain()是上个世纪的。
  • @Abdulali:如果你想使用 Unicode,通常的做法是在 #includeing windows.h 之前声明 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPTSTR, int) 和 #defineing UNICODE。没有必要单独编写非 Unicode 和 Unicode WinMain()s,反正你也不能。

标签: c++ visual-studio-2010 unicode winmain


【解决方案1】:

重载WinMain没有意义,这个函数只在启动时调用一次。如果您希望它在 UNICODE 和非 UNICODE 构建中工作,那么您应该让 suse 接受 wchar_t* 和 char* 作为 pszCmdLine 参数:

int WINAPI _tWinMain(
   HINSTANCE hInstanceExe,
   HINSTANCE,
   PTSTR pszCmdLine,
   int nCmdShow);

【讨论】:

  • @Abdulali :不,它不能。 Unicode 入口点命名为wWinMain;您不能重载具有不同名称的两个函数。 _tWinMain 只是根据是否定义了UNICODE 宏扩展为WinMain 或wWinMain。
  • 你缺少一个 HINSTANCE,作为第二个参数
  • @Abdulali:这里没有人愿意为验证您阅读的内容而支付 215.00 美元。并且以后在 Stack Overflow 上写问题时,只需将代码粘贴到问题中,不要将其链接到某种文件保管箱服务。
  • @Abdulali:我在你提供的代码中没有看到任何WinMain()“重载”,所以我什至不明白你的问题的前提。重点仍然存在,你不能有两个 WinMain() 函数,即使它们有不同的名称。编写WinMain() 函数的方式是有一个函数with this exact signature(忽略__ins),如果你想要Unicode,你在包含windows.h 之前定义UNICODE。就是这样。
  • 如果它们有不同的名称(如WinMain() 和wWinMain() 做),那么根据定义它们不是彼此的重载。重载必须具有完全相同的名称,并且它们必须同时存在于可执行文件中(WinMain() 和 wWinMain() 不能共存 - 应用程序只有一个,而不是两者)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多