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

kov*_*rex 4 c++ unicode visual-studio wmain

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

而不是

int main(int argc, char** argv)
Run Code Online (Sandbox Code Playgroud)

我想用

int wmain(int argc, wchar_t** argv)
Run Code Online (Sandbox Code Playgroud)

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

error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
Run Code Online (Sandbox Code Playgroud)

这是我试过的:

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

    warning LNK4258: directive '/ENTRY:mainCRTStartup' not compatible with switch '/ENTRY:mainWCRTStartup'; ignored
    
    Run Code Online (Sandbox Code Playgroud)
  • 试了一下_tmain,只是为了发现它只是一个将它改为main的宏.

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

什么都没有帮助.

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

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

Han*_*ant 9

  Using the #pragma comment(linker, "/SUBSYSTEM:CONSOLE /ENTRY:mainCRTStartup")
Run Code Online (Sandbox Code Playgroud)

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

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

就是这样 /ENTRY:wmainCRTStartup

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