类型转换 -- 使用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类型):
#include <atlconv.h>…USES_CONVERSION;cvSaveImage(W2CA(filepath),pImg8u);


具体就这么多了,希望可以帮到大家~~


http://blog.sina.com.cn/s/blog_5d49d449010136dq.html

原创粉丝点击