_bstr_t 类型,BSTR类型和CString类型到底有什么区别.doc_第1页
_bstr_t 类型,BSTR类型和CString类型到底有什么区别.doc_第2页
_bstr_t 类型,BSTR类型和CString类型到底有什么区别.doc_第3页
_bstr_t 类型,BSTR类型和CString类型到底有什么区别.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

bstr_t类型到底是类型呢?用的时候也可以直接_bstr_t bstr=abcd; 还可以 _bstr_t bstr=abcd; CString str=(char *)bstr;/_bstr_t莫非是指针?指针可以赋常量字符串? 我在ADO数据库编程中用如下语句: CString str=(m_RecordSet-GetCollect(Name).bstrVal;/m_RecordSet是_RecordsetPtr类型 (m_RecordSet-GetCollect(Name).bstrVal是BSTR类型 说明BSTR可以直接赋给CString类型,从编译器中得知BSTR是unsigned short*类型,怎么可以直接赋给CString对象呢? 实在不清楚这三个的本质区别,请高手指点! 网友回复:CString str=(char *)bstr;/_bstr_t莫非是指针?指针可以赋常量字符串? _bstr_t有这几个成员 operator const wchar_t*( ) const throw( ); operator wchar_t*( ) const throw( ); operator const char*( ) const; operator char*( ) const; 网友回复:我搜集的资料:May this can help you. 7.关于CString和其他一些自动化类型的相互转换问题. 未参考的资源: 在各种字符串类型之间进行转换 /zh-cn/library/ms235631.aspx 类型类别:CString ,VARIANT,BSTR,_t_btr,等 预备知识: BSTR:根据MSDN,他的内部结构为:4字节的长度前缀(字节单位),字符串(宽),2字节结束标志0x0000.平常的BSTR是指向字符串的第一字节,并非前缀.比如定义BSTR myBstr=L” I am a happy BSTR”,这样其实不正确,并没有正确生成前缀.应该这样: BSTR MyBstr = SysAllocString(LI am a happy BSTR);这样就会在内存分配时就会加上前缀和结束标志. BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。_bstr_t: _bstr_t是C 对BSTR的封装,它的构造和析构函数分别调用SysAllocString和SysFreeString函数,其他操作是借用BSTR API函数。与_variant_t相似,使用时也要添加comutil.h和comsupp.lib CComBSTR: CComBSTR是对BSTR数据类型封装的一个ATL类. CComBSTR bstr1; bstr1 = Bye; / 直接赋值 OLECHAR* str = OLESTR(ta ta); / 长度为5的宽字符 CComBSTR bstr2(wcslen(str); / 定义长度为5 wcscpy(bstr2.m_str, str); / 将宽字符串复制到BSTR中 CComBSTR bstr3(5, OLESTR(Hello World); CComBSTR bstr4(5, Hello World); CComBSTR bstr5(OLESTR(Hey there); CComBSTR bstr6(Hey there); CComBSTR bstr7(bstr6); VARIANT,_variant_t _variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。 参考如下代码: _variant_t: long l=222; ing i=100; _variant_t lVal(l); lVal = (long)i; COleVariant: COleVariant v3 = 字符串, v4 = (long)1999; CString str =(BSTR)v3.pbstrVal; long i = v4.lVal; / 构造时复制,内容为Hey there (1).BSTR和CString的相互转换 BSTR-CString :BSTR可直接赋值给CString.cstring=myBstr CString-BSTR: myBstr=cstring.AllocSysString(); (2)char * 和BSTR Char * -BSTR: char * pChar=Hello!; BSTR myBstr=_com_util:ConvertStringToBSTR(pChar); :SysFreeString(myBstr);/这个函数作用后myBstr仍存在,还可赋值给cstring,令人费解. BSTR-char *: char *p=_com_util:ConvertBSTRToString(myBstr); delete p;/指针delete后还可访问,只是只想的是乱码. (3)char *和_bstr_t, Char * -_bstr_t: 1.直接赋值:如_bstr_t bstr;char * pChar=”hello!”;2.pChar作为_bstr_t的构造参数:char * pChar=”Hello!”;_bstr_t bstr(pChar); _bstr_t- char *:_bstr_t bstr ;char *pChar=(LPTSTR)bstr (4)_bst_t和BSTR _bstr_t-BSTR:BSTR操作符. BSTR-_bstr_t:_bstr_t的构造函数. (5) CComBSTR: 内部有BSTR类型的公有成员m_str. To char: LPCTSTR操作符 To BSTR: BSTR操作符 To _bstr_t: 先使用BSTR操作符或直接取其m_str成员, 作为_bstr_t的构造函数 由于CComBSTR中的数据成员BSTR m_str公开, 而且重载了&操作符, 适合作为以BSTR作 为传出参数的函数, 但要注重内存泄漏问题, 不要将已赋值的CComBSTR作为传出参数 (6) VARIANT, CString , _variant_t,这个只举几个小例子: CString 放到VARIANT 中: CString temp=”Aloha”; variant.vt=VT_BSTR; variant.bstrVal=temp.AllocSysString();/似乎这里的CString包含的是宽字符. VARIANT 到CString CString=(LPCTSTR)(_bstr_t)_variant_t (7)CString,Int Char *,float - Char * ? Int: atoi();这里涉及到一些细节:转换在碰到非法字符时停下,并保留已经转换的值 ,比如”1asd”转换后返回1,”asd”返回0,也就是没有转换。 CString-Int: Int- CString: int n=atoi(str.GetBuffer(0); 函数原型: int atoi( const char *str ); 返回值为转换结果。,若无法转换,则返回0. CString temp; Temp.Format(“%d”,nTemp); Int?Char *: 转换函数原型: char *_itoa( int value, char

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论