CComBSTR操作种种

  CComBSTR是封装了BSTR的一个类。
	/*
	class CComBSTR
	{
	public:
		BSTR	m_str;
	}
	*/

  CComBSTR提供了A构造函数、B赋值操作、C获得内部BSTR方法、D连接、E大小写转换操作、F比较操作、G永久性操作等。

  CComBSTR提供了8个构造函数、3个赋值操作方法、4个和内部BSTR有关的方法、9个连接方法、2个大小写转换方法、5个比较操作方法、2个永久性操作方法(写入和读取)。

  相关代码操作说明我在如下代码里进行了注释:

	//A.CComBSTR的8个构造函数
	//1.默认构造函数,把m_str初始化为NUL
	CComBSTR	cbstr1;				
	LPCOLESTR	myOleStr	= L"Hello const OLE string";
		//使用OLESTR宏可以获得正确的参数类型
	LPCOLESTR	myOleStrMacro		= OLESTR("construct a correct string by olestr macro");	
	//2.常用构造函数,已NUL结尾的OLESTR构造
	CComBSTR	cbstr2(myOleStr);		
	//3.指定缓冲长度,不包括NUL结尾字符
	CComBSTR	cbstr3(64,myOleStr);	
	//4.指定缓冲长度n,并补足n个NUL
	CComBSTR	cbstr4(64);
	//5.拷贝构造函数
	CComBSTR	cbstr5(cbstr4);
	LPCSTR		myCStr	= "Hello const c string";
	//6.使用C string构造CComBSTR
	CComBSTR	cbstr6(myCStr);
	//7.使用C string构造指定长度n字符串,以NUL补足长度n
	CComBSTR	cbstr7(64,myCStr);
	//8.把c风格的IID转换为字符串形式({...}形式)
	CComBSTR	cbstr8(IID_IUnknown);

	//B.CComBSTR的3个赋值操作
	//1.CComBSTR之间的operator=
	cbstr8	= cbstr7;
	//2.使用LPCOLESTR赋值
	cbstr8	= myOleStr;
	//3.使用LPCSTR赋值
	cbstr8	= myCStr;

	//C.4个获得内部BSTR的方法
	//1.operator BSTR() const {return m_str;}
		//注意如果使用取址(&)获得BSTR,我们并没有控制权,它还是归CComBSTR管理
	BSTR	myInnerBSTR	= (BSTR)cbstr8;
	//2.使用CopyTo获得内部BSTR的拷贝,我们完全拥用了BSTR的所有权,要自己负责释放
	BSTR	myCopyBSTR;
	cbstr8.CopyTo(&myCopyBSTR);
	//3.使用Detach方法,CComBSTR内部的BSTR将被释放
	BSTR	myDetachBSTR	= cbstr8.Detach();
	//4.Attach方法,把我们拥有所有权的BSTR交给CComBSTR管理
	BSTR	myAttachBSTR	= SysAllocString(L"hello bstr");
	cbstr8.Attach(myAttachBSTR);

	//D.CComBSTR的连接
	//1.连接上指定长度缓冲,并附加给定的LPCOLESTR
	cbstr8.Append(myOleStr,32);
	//2.连接给定的LPCOLESTR
	cbstr8.Append(myOleStr);
	//3.连接c string
	cbstr8.Append(myCStr);
	//4.连接一个c字符
	cbstr8.Append('x');
	//5.连接一个wchar_t
	wchar_t	wc	= '测';
	cbstr8.Append(wc);
	//6.连接一个CComBSTR
	cbstr8.Append(cbstr7);
	//7.使用operator+连接CComBSTR
	cbstr8	+= cbstr7;
	//8.连接BSTR
	cbstr8.Append(myInnerBSTR);
	//9连接给定的cstring
	cbstr8.AppendBytes("hello world",32);

	//E.大小写转换
	cbstr8.ToLower();
	cbstr8.ToUpper();

	//F.比较操作
	//1.NUL检查
	if(!cbstr8)
	{
		//非空
	}
	//2.CComBSTR之间的比较
	if (cbstr8 < cbstr7)
	{
	}
	//3.CComBSTR和LPCSTR之间的比较
	if (cbstr8 < myCStr)
	{
	}
	//4.CComBSTR和LPCOLESTR之间的比较
	if (cbstr8 < myOleStr)
	{
	}
	//5.CComBSTR和LPOLESTR之间的比较
	LPOLESTR	myUncOleStr	= L"hello ole str";
	if (cbstr8 < myUncOleStr)
	{
	}

	//G.永久性
	IStream*	istrm	= NULL;
	//1.写入流操作
	cbstr8.WriteToStream(istrm);
	//2.从流中读取操作
	cbstr8.ReadFromStream(istrm);
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值