复制的C++游戏代码在Visual Studio新项目中运行失败如何解决
问题排查结果
你的报错根源是Visual Studio新建项目默认启用Unicode字符集,和教程作者的项目配置不一致导致的字符串类型不匹配,和VS版本、外部依赖文件差异无关。
两种解决方法:
方法1:修改项目配置(无需改代码,和教程配置对齐)
- 右键解决方案资源管理器中的你的项目名称,选择「属性」
- 依次展开「配置属性」→「高级」,找到「字符集」选项
- 将默认的「使用 Unicode 字符集」修改为「使用多字节字符集」,保存配置后重新编译即可正常运行。
方法2:修改代码适配Unicode标准(更推荐,符合Win32开发规范)
只需要修改两处报错位置的代码,给字符串添加L前缀标记为宽字符:
// 原报错的lpszClassName赋值行修改为 window_class.lpszClassName = L"Game Window Class"; // 原报错的CreateWindow调用行修改为 HWND window = CreateWindow(window_class.lpszClassName, L"My First Game!", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 1280, 720, 0, 0, hInstance, 0);
修改完成后直接编译即可运行。
原理说明:Unicode模式下Win32 API的所有字符串入参都要求是
wchar_t*宽字符类型,直接传入普通char*类型的字符串就会触发类型不匹配报错。教程作者的项目提前修改为多字节字符集,所以相同代码在他的项目中可以正常运行。
内容的提问来源于stack exchange,提问作者Nicholas Fresta
相关产品推荐
相关产品推荐

