如何强制视觉工作室使用wmain而不是main
How to force the visual studio to use the wmain instead of main
我需要解析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-compatibile)工具集,但当我尝试使用默认的工具集时,它仍然不起作用。
第2版:我试着做一个全新的项目,而wmain在那里打破常规。我不需要更改任何内容,所以必须是当前项目中的某些特定设置导致了这种情况。
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 Code Page)并修改控制台窗口的字体,以使您满意。YMMV。
几个小时以来,我一直在合并工作正常的新项目和我们的项目之间的差异,直到我发现问题是由我们对allegro预处理程序定义的错误配置引起的。
在win/alconfig.h的快板库深处,中有以下几行
#ifndef ALLEGRO_NO_MAGIC_MAIN
#if defined _MSC_VER && !defined ALLEGRO_LIB_BUILD
#pragma comment(linker,"/ENTRY:mainCRTStartup")
#endif
#endif
我们确实为allegro库编译设置了这个宏,但allegro文件也包含在主项目中,没有指定这个。在主项目中定义宏(显然)解决了这个问题。
我真的没看到这种混合物!
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 函数是否可以访问传递给main()的参数
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 我的 int main() 中出现堆栈溢出错误
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- 当我尝试在 Main 中调用插入函数时,它不是取数字?
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- 为什么类和 main() 函数中也有动态内存分配
- 在 main.cpp 的上下文中找不到目录(带有 CMake 的快板)
- 我想在 Main 中用 C++ 调用其他类中的一个类,但我做不到
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- 如何强制视觉工作室使用wmain而不是main
- 警告:'int main(int, char***)' 的第二个参数应该是 'char **' [-Wmain]