使用Unicode下的cannot convert parameter 1 from 'CString' to 'const char *' 解决办法

本文深入探讨了在C++编程中字符集转换的原理与实践,包括如何使用`<atlconv.h>`中的宏进行字符间转换,以及在实际应用中可能遇到的问题与解决策略。重点强调了在不同场景下选择合适转换方式的重要性,如短字符串转换、避免循环内转换等,以确保程序的稳定性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网上搜索了很多答案都没有办法得到解决,当然这些办法都可以使得编译通过,例如通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值