我需要解析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的宏。
没有任何帮助。
编辑: 我想提一下,我正在使用vs120_xp(Win xp兼容)工具集,但是当我尝试使用默认工具集时,它仍然无效。
EDIT2: 我试图制作一个全新的项目,并且wmain在开箱即用。我没有必要改变任何东西,所以它必须是当前项目中导致它的一些特定设置。
答案 0 :(得分:9)
Using the #pragma comment(linker, "/SUBSYSTEM:CONSOLE /ENTRY:mainCRTStartup")
你越来越近,不够接近。 CRT有四个入口点:
所以它是/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文件,没有指定这个。 在主项目中定义宏可以解决问题(显然)。
我真的没有看到这个来了!