CString的Getbuffer 与TCHAR数组的差别
CString的Getbuffer 与TCHAR数组的区别
很纠结的一个问题,
问题原因是,需要往一个函数传void*的一个指针,因为原数据保存在Ctring中,因此想到用Getbuffer返回的LPTSTR即PXSTR指针,因为传给的是oracle数据库,数据库解析的是乱码,但奇怪的是如果传一个TCHAR的数组就没问题,如代码
不知有没有遇到这种情况的,vs字符集为unicode。
------解决方案--------------------
Cstring str = _T("test"); //传给数据库,接收的是乱码 TCHAR str = _T("test"); //数据库能够解析
使用下面形式试试
Func(... , (void*)str, ...); //传给一个形参void*的函数
Func(... , (void*)_bstr_t(str), ...); //传给一个形参void*的函数
------解决方案--------------------
------解决方案--------------------
这个函数的参数类型void*实在不像是期待BSTR的样子,否则应该直接使用BSTR作为参数类型。
楼主确信使用自己贴出的简单代码测试过?
------解决方案--------------------
那就用抽像版的试一下,100%确定到底是不是CString的问题,还是CString里边的字符的问题
很纠结的一个问题,
问题原因是,需要往一个函数传void*的一个指针,因为原数据保存在Ctring中,因此想到用Getbuffer返回的LPTSTR即PXSTR指针,因为传给的是oracle数据库,数据库解析的是乱码,但奇怪的是如果传一个TCHAR的数组就没问题,如代码
Cstring str = _T("test"); //传给数据库,接收的是乱码
TCHAR str = _T("test"); //数据库能够解析
Func(... , void*, ...); //传给一个形参void*的函数
不知有没有遇到这种情况的,vs字符集为unicode。
------解决方案--------------------
Cstring str = _T("test"); //传给数据库,接收的是乱码 TCHAR str = _T("test"); //数据库能够解析
使用下面形式试试
Func(... , (void*)str, ...); //传给一个形参void*的函数
Func(... , (void*)_bstr_t(str), ...); //传给一个形参void*的函数
------解决方案--------------------
Cstring str = _T("test");
str.AllocSysString()
------解决方案--------------------
这个函数的参数类型void*实在不像是期待BSTR的样子,否则应该直接使用BSTR作为参数类型。
楼主确信使用自己贴出的简单代码测试过?
------解决方案--------------------
那就用抽像版的试一下,100%确定到底是不是CString的问题,还是CString里边的字符的问题