在网上搜索了很多答案都没有办法得到解决,当然这些办法都可以使得编译通过,例如通过CString.GetBuffer可以得到char*变量指向CString的首地址,但是多种方法在运行时进入xstring文件执行时会产生十分怪异的错误,最终通过对字符集类型进行转换,得到了一个正确的结果,对以后处理字符串遇到类似的错误也会有所帮助,之前没有接触过字符集的转换,而在这个例子中数据类型的强制转换是行不通的,也因此提供了一个很好的解决这种问题的办法。
①、只适合于进行短字符串的转换;
②、不要试图在一个次数比较多的循环体内进行转换;
③、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
④、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
因此,对程序中的错误可以通过下面几行代码解决(cvSaveImage的第一个参数为const Char *类型,pImg8u为IplImage*类型,filepath为CString类型):
#include <atlconv.h>
…
USES_CONVERSION;
cvSaveImage(W2CA(filepath),pImg8u);
关于各种字符串类型的转换:<atlconv.h>中有大量的宏用来转换。调用这些宏之前需要先使用USES_CONVERSION定义一下所需的变量们,不过据说USES_CONVERSION不会释放定义的变量,所以尽量调用一次就好,严禁放在循环里。下面是宏的列表和命名规则:
上表中的宏函数,非常的有规律,每个字母都有确切的含义如下:
①、只适合于进行短字符串的转换;
②、不要试图在一个次数比较多的循环体内进行转换;
③、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
④、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
因此,对程序中的错误可以通过下面几行代码解决(cvSaveImage的第一个参数为const Char *类型,pImg8u为IplImage*类型,filepath为CString类型):
#include <atlconv.h>
…
USES_CONVERSION;
cvSaveImage(W2CA(filepath),pImg8u);