如何强制visual studio使用wmain而不是main

时间:2015-02-05 11:08:23

标签: c++ visual-studio unicode wmain

我需要解析unicode参数,所以我想改用wmain

所以而不是

int main(int argc, char** argv)

我想用

int wmain(int argc, wchar_t** argv)

问题是视觉工作室没有识别出wmain,而是试图使用main代替:

error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup

这就是我的尝试:

  • 更改属性 - >常规 - >字符集
  • 更改入口点(在这种情况下,我对那些甚至没有入口点的库有很多兼容性错误,因此无法在那里指定。)

    warning LNK4258: directive '/ENTRY:mainCRTStartup' not compatible with switch '/ENTRY:mainWCRTStartup'; ignored
    
  • 尝试使用_tmain,只是为了找出它只是一个将其更改为main的宏。

  • 使用#pragma注释(链接器,“/ SUBSYSTEM:CONSOLE / ENTRY:mainCRTStartup”)
  • 使用UNICODE宏

没有任何帮助。

编辑:   我想提一下,我正在使用vs120_xp(Win xp兼容)工具集,但是当我尝试使用默认工具集时,它仍然无效。

EDIT2:   我试图制作一个全新的项目,并且wmain在开箱即用。我没有必要改变任何东西,所以它必须是当前项目中导致它的一些特定设置。

2 个答案:

答案 0 :(得分:9)

  Using the #pragma comment(linker, "/SUBSYSTEM:CONSOLE /ENTRY:mainCRTStartup")

你越来越近,不够接近。 CRT有四个入口点:

  • mainCRTStartup =>调用main(),控制台模式应用程序的入口点
  • wmainCRTStartup =>调用wmain(),如上所述,但是Unicode版本
  • WinMainCRTStartup =>调用WinMain(),本机Windows应用程序的入口点
  • wWinMainCRTStartup =>调用wWinMain(),如上所述,但是Unicode版本

所以它是/ENTRY:wmainCRTStartup

请注意,假设默认的控制台代码页,命令行参数将转换为Unicode。这有点不可预测,它只是西欧和美洲的传统437 OEM代码页。用户可能需要使用CHCP命令(CHange代码页)并修改控制台窗口字体以使您满意。 YMMV。

答案 1 :(得分:0)

我正在将正常工作的新项目与我们的项目之间的差异合并数小时,直到我发现问题是由于我们对allegro预处理器定义的错误配置造成的。

在win / alconfig.h中的allegro库深处,有这些行

#ifndef ALLEGRO_NO_MAGIC_MAIN
  #if defined _MSC_VER && !defined ALLEGRO_LIB_BUILD
    #pragma comment(linker,"/ENTRY:mainCRTStartup")
  #endif
#endif

我们为allegro库编译设置了这个宏,但是主项目中也包含了allegro文件,没有指定这个。 在主项目中定义宏可​​以解决问题(显然)。

我真的没有看到这个来了!