类型转换 -- 使用Unicode下的cannot convert parameter 1 from 'CString' to 'const char *' 解决办法
来源:互联网 发布:华西医院知乎 编辑:程序博客网 时间:2024/05/23 01:24
在网上搜索了很多答案都没有办法得到解决,当然这些办法都可以使得编译通过,例如通过CString.GetBuffer可以得到char*变量指向CString的首地址,但是多种方法在运行时进入xstring文件执行时会产生十分怪异的错误,最终通过对字符集类型进行转换,得到了一个正确的结果,对以后处理字符串遇到类似的错误也会有所帮助,之前没有接触过字符集的转换,而在这个例子中数据类型的强制转换是行不通的,也因此提供了一个很好的解决这种问题的办法。
关于各种字符串类型的转换:<atlconv.h>中有大量的宏用来转换。调用这些宏之前需要先使用USES_CONVERSION定义一下所需的变量们,不过据说USES_CONVERSION不会释放定义的变量,所以尽量调用一次就好,严禁放在循环里。下面是宏的列表和命名规则:
上表中的宏函数,非常的有规律,每个字母都有确切的含义如下:
利用这些宏,可以快速的进行各种字符间的转换。使用前必须包含头文件,并且申明USER_CONVERSION;使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点:
①、只适合于进行短字符串的转换;
②、不要试图在一个次数比较多的循环体内进行转换;
③、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
④、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
因此,对程序中的错误可以通过下面几行代码解决(cvSaveImage的第一个参数为const Char *类型,pImg8u为IplImage*类型,filepath为CString类型):
关于各种字符串类型的转换:<atlconv.h>中有大量的宏用来转换。调用这些宏之前需要先使用USES_CONVERSION定义一下所需的变量们,不过据说USES_CONVERSION不会释放定义的变量,所以尽量调用一次就好,严禁放在循环里。下面是宏的列表和命名规则:
上表中的宏函数,非常的有规律,每个字母都有确切的含义如下:
利用这些宏,可以快速的进行各种字符间的转换。使用前必须包含头文件,并且申明USER_CONVERSION;使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点:
①、只适合于进行短字符串的转换;
②、不要试图在一个次数比较多的循环体内进行转换;
③、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
④、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
因此,对程序中的错误可以通过下面几行代码解决(cvSaveImage的第一个参数为const Char *类型,pImg8u为IplImage*类型,filepath为CString类型):
#include <atlconv.h>…USES_CONVERSION;cvSaveImage(W2CA(filepath),pImg8u);
具体就这么多了,希望可以帮到大家~~
http://blog.sina.com.cn/s/blog_5d49d449010136dq.html
- 类型转换 -- 使用Unicode下的cannot convert parameter 1 from 'CString' to 'const char *' 解决办法
- 使用Unicode下的cannot convert parameter 1 from 'CString' to 'const char *' 解决办法
- cannot convert parameter 1 from 'CString' to 'const char *'
- cannot convert parameter 1 from 'CString' to 'const char *转换问题
- 在UNICODE编码格式下使用cvSaveImage出现cannot convert from 'CString' to 'const char *
- VS2005下的 cannot convert parameter 1 from 'const char [5]' to 'LPCTSTR'错误解决
- vs2008下cannot convert parameter 1 from 'LPCTSTR' to 'const char *'的解决方法
- error C2664: 'atoi' : cannot convert parameter 1 from 'CString' to 'const char *'
- cannot convert parameter 1 from 'const char *' to 'LPCWSTR
- cannot convert parameter 1 from 'std::string' to 'const char *'
- cannot convert parameter 1 from 'const char [] ' to 'const wchar_t * '的解决方法
- cannot convert parameter 1 from 'const char [] ' to 'const wchar_t * '的解决方法
- cannot convert parameter 1 from 'const char [] ' to 'const wchar_t * '的解决方法
- 使用atoi 报错:cannot convert parameter 1 from '_TCHAR *' to 'const char *'
- cannot convert from 'const char [51]' to 'const CString'
- cannot convert parameter 2 from 'const char[15]' to 'LPWSTR';
- 'strcpy' : cannot convert parameter 2 from 'LPCTSTR' to 'const char *'
- cannot convert parameter 2 from 'const char [12]' to 'LPCWSTR'
- UVA 10004 (13.07.09)
- Selenium定位页面元素的方法
- 读取字符串长度的窗体
- poj 3356 AGTC
- Linux学习之旅 (异常Cannot write file to virtual machine. Aborting the file copy operation)
- 类型转换 -- 使用Unicode下的cannot convert parameter 1 from 'CString' to 'const char *' 解决办法
- cocos2d-x 配置android编译环境
- iOS学习笔记47——图片异步加载之EGOImageLoading
- P2P网贷平台如何选择好标?
- eclipse使用调整内存相关
- java与js通信
- 学习碎碎念
- Chrome如何改变背景色来保护眼睛
- MVC中jQuery上传文件插件使用