设置首页收藏本站
开启左侧

VC中调用read_image()报重载中没有一个转换所有参数类型

[复制链接]
18255187044 发表于 2016-4-19 10:18:45 | 显示全部楼层 |阅读模式
read_image()报重载中没有一个转换所有参数类型,
111.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2016-4-19 10:33:32 | 显示全部楼层
在C++中对于函数参数的调用是支持函数重载的,该问题所在原因则是:
read_image参数表里,第2个参数是const char*类型,而默认dlg.GetPathName()返回的数据类型是CString类型
在UNICODE字符集里面,这两种是没法直接转换的,所以构不成函数重载。
解决方案:
1.由于操作系统是基于UNICODE版本的,建议还是使用转换函数进行转换;

转换函数:
  1. void Wchar2Char(WCHAR* pSrc,char* pDes)
  2. {
  3.         int nLen = wcslen(pSrc) + 1;
  4.         WideCharToMultiByte(CP_ACP,0,pSrc,nLen,pDes,2 * nLen,NULL,NULL);
  5. }
复制代码
该函数实现从宽字节编码到多字节编码的转换。


调用函数功能为:
  1. CString strPath=_T("C:\\User");
  2. char *chTemp;
  3. chTemp=new char[512];
  4. memset(chTemp,0x00,512);
  5. Wchar2Char(strPath.GetBuffer(),chTemp);
复制代码
转换完成后chTemp则是需要的char*数据类型了。

2.在工程属性里面将工程字符集选项选择为使用多字节字符集模式即可。
(不推荐这种方式,因为操作系统会反复进行编码转换)
QQ截图20160419103719.png




点评

01.CString strPath=dlg.GetPathName();需要去掉-T(""),才能对。01.CString strPath=_T("dlg.GetPathName()");不对  详情 回复 发表于 2016-4-19 16:36
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| 18255187044 发表于 2016-4-19 16:36:52 | 显示全部楼层
hgzhu 发表于 2016-4-19 10:33
在C++中对于函数参数的调用是支持函数重载的,该问题所在原因则是:
read_image参数表里,第2个参数是const ...

01.CString strPath=dlg.GetPathName();需要去掉-T(""),才能对。01.CString strPath=_T("dlg.GetPathName()");不对

点评

你写的啥玩意???_T("")是直接作用于字符串的,不是作用于返回字符串的函数的。你看看我的回复  发表于 2016-4-19 17:41
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表