首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

CString的Getbuffer 与TCHAR数组的差别

2013-12-05 
CString的Getbuffer 与TCHAR数组的区别很纠结的一个问题,问题原因是,需要往一个函数传void*的一个指针,因

CString的Getbuffer 与TCHAR数组的区别
很纠结的一个问题,
问题原因是,需要往一个函数传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里边的字符的问题

引用:
Quote: 引用:

这个函数的参数类型void*实在不像是期待BSTR的样子,否则应该直接使用BSTR作为参数类型。

楼主确信使用自己贴出的简单代码测试过?


引用:
Cstring str = _T("test"); 
str.AllocSysString()


引用:
Cstring str = _T("test"); //传给数据库,接收的是乱码   TCHAR str = _T("test"); //数据库能够解析   

使用下面形式试试
Func(... , (void*)str, ...); //传给一个形参void*的函数  
Func(... , (void*)_bstr_t(str), ...); //传给一个形参void*的函数  


数据库用的是oracle,因为是别人写的数据库连接部分,拿来用,用的是OCI,貌似OCI有他自己的数据格式转换吧,Func是OCIBindByName传的数据指针都是void*的,通过传SQLT_CHR这么个数据类型来确定是什么类型的数据,所以貌似还是上面的代码是抽象版的,但大致情况是这样的,很纠结传TCHAR数组就可以,传Getbuffer就乱码,两者不应该是一样的吗

热点排行