CComBSTR类是ATL对BSTR字符串的一个封装。
class CComBSTR { public: BSTR m_str; }
CComBSTR类有八个构造函数。 CComBSTR()// {//构建一个空的BSTR字符串 m_str = NULL; } /*explicit*/ CComBSTR(int nSize) {//构建一个nSize大小的未初始化的BSTR字符串 m_str = ::SysAllocStringLen(NULL, nSize); } /*explicit*/ CComBSTR(int nSize, LPCOLESTR sz) {//构建一个BSTR字符串,它从OLECHAR字符指针sz开始的nSize个字符 m_str = ::SysAllocStringLen(sz, nSize); } /*explicit*/ CComBSTR(LPCOLESTR pSrc) {//构建一个用OLECHAR字符指针所指向的字符串初始化的BSTR字符串 m_str = ::SysAllocString(pSrc); } /*explicit*/ CComBSTR(const CComBSTR& src) {//构建一个BSTR字符串从另一个CComBSTR对象 m_str = src.Copy(); } /*explicit*/ CComBSTR(REFGUID src) {//构建一个BSTR字符串,它接受一个GUID参数,并据此产生一个包含GUID字符的字符串,用于注册很方便 LPOLESTR szGuid; StringFromCLSID(src, &szGuid); m_str = ::SysAllocString(szGuid); CoTaskMemFree(szGuid); } |
CComBSTR类初始化有三个函数。 CComBSTR& operator=(const CComBSTR& src) {//用另一个对象初始化 if (m_str != src.m_str) { if (m_str) ::SysFreeString(m_str); m_str = src.Copy(); } return *this; }
CComBSTR& operator=(LPCOLESTR pSrc) {//用一个OLECHAT字符指针初始化,这个方法需要注意, //如果pSrc中内嵌了NULL字符,那么字符的初始化到NULL就截止了 ::SysFreeString(m_str); m_str = ::SysAllocString(pSrc); return *this; } CComBSTR& operator=(LPCSTR pSrc) { ::SysFreeString(m_str); m_str = A2WBSTR(pSrc); return *this; } |