错误原因
今天在做C++图形库的时候,遇到了一个ERROR,在VC6上可以运行,但是移到了VS2017上就报错
错误 C2665 “loadimage”: 2 个重载中没有一个可以转换所有参数类型
错误原因:简单来说,这是由于字符编码问题引起的。
VC6 默认使用的 MBCS 编码,而 VC2008 及高版本 VC 默认使用的 Unicode 编码。以下详细解释这个问题:
用 char 表示字符时,英文占用一个字节,中文占用两个字节。这样有一个严重的问题:两个连续字节,究竟是两个英文字符,还是一个中文字符?为了解决这个问题,Unicode 编码诞生了。Unicode 编码不管中文英文都用两个字节表示。
解决方法
- 选择“项目”菜单->项目属性->配置属性->常规->字符集,改为“未设置”即可。
- 在图片名称前面加_T(“”)
loadimage(&EBC_Picture, _T("liekong.jpg"), 1200, 675);
- 在代码中取消 Unicode 编码的宏定义,让后续编译都以 MBCS 编码进行。
方法很简单,只需要在代码文件的顶部增加以下代码:
这样就可以取消 Unicode 编码的宏定义,让整个项目以 MBCS 编码编译。#undef UNICODE #undef _UNICODE