CComBSTR
类
此类是 BSTR
的包装器。
语法
class CComBSTR
成员
公共构造函数
名称 | 描述 |
---|---|
CComBSTR::CComBSTR |
构造函数。 |
CComBSTR::~CComBSTR |
析构函数。 |
公共方法
名称 | 描述 |
---|---|
CComBSTR::Append |
将字符串追加到 m_str 。 |
CComBSTR::AppendBSTR |
将 BSTR 追加到 m_str 。 |
CComBSTR::AppendBytes |
将指定数量的字节追加到 m_str 。 |
CComBSTR::ArrayToBSTR |
从 safearray 中每个元素的第一个字符创建 BSTR 并将其附加到 CComBSTR 对象。 |
CComBSTR::AssignBSTR |
将 BSTR 分配到 m_str 。 |
CComBSTR::Attach |
将 BSTR 附加到 CComBSTR 对象。 |
CComBSTR::BSTRToArray |
创建一个从零开始的一维 safearray,该数组的每个元素是 CComBSTR 对象中的一个字符。 |
CComBSTR::ByteLength |
返回 m_str 的长度(以字节为单位)。 |
CComBSTR::Copy |
返回 m_str 的副本。 |
CComBSTR::CopyTo |
通过 [out] 参数返回 m_str 的副本 |
CComBSTR::Detach |
从 CComBSTR 对象中分离 m_str 。 |
CComBSTR::Empty |
释放 m_str 。 |
CComBSTR::Length |
返回 m_str 的长度。 |
CComBSTR::LoadString |
加载字符串资源。 |
CComBSTR::ReadFromStream |
从流加载 BSTR 对象。 |
CComBSTR::ToLower |
将字符串转换为小写。 |
CComBSTR::ToUpper |
将字符串转换为大写。 |
CComBSTR::WriteToStream |
将 m_str 保存到流。 |
公共运算符
“属性” | 描述 |
---|---|
CComBSTR::operator BSTR |
将 CComBSTR 对象强制转换为 BSTR。 |
CComBSTR::operator ! |
根据 m_str 是否为 NULL 返回 TRUE 或 FALSE。 |
CComBSTR::operator != |
将 CComBSTR 与某个字符串进行比较。 |
CComBSTR::operator & |
返回 m_str 的地址。 |
CComBSTR::operator += |
将 CComBSTR 追加到对象。 |
CComBSTR::operator < |
将 CComBSTR 与某个字符串进行比较。 |
CComBSTR::operator = |
为 m_str 赋值。 |
CComBSTR::operator == |
将 CComBSTR 与某个字符串进行比较。 |
CComBSTR::operator > |
将 CComBSTR 与某个字符串进行比较。 |
公共数据成员
“属性” | 描述 |
---|---|
CComBSTR::m_str |
包含与 CComBSTR 对象关联的 BSTR 。 |
注解
CComBSTR
类是 BSTR
(以长度为前缀的字符串)的包装器。 该长度作为整数存储在字符串中数据前面的内存位置。
BSTR
在最后一个计数字符之后以 null 结尾,但也可能包含嵌入在字符串中的 null 字符。 字符串长度由字符计数而不是第一个 null 字符确定。
注意
CComBSTR
类提供许多将 ANSI 或 Unicode 字符串用作参数的成员(构造函数、赋值运算符和比较运算符)。 这些函数的 ANSI 版本不如其对应的 Unicode 版本那样高效,因为临时 Unicode 字符串通常是在内部创建的。 为确保效率,请尽可能使用 Unicode 版本。
注意
由于 Visual Studio .NET 中实现的查找行为已得到改进,在先前版本中编译的 bstr = L"String2" + bstr;
等代码应实现为 bstr = CStringW(L"String2") + bstr
。
有关使用 CComBSTR
时的注意事项列表,请参阅使用 CComBSTR
编程。
要求
标头:atlbase.h
CComBSTR::Append
将 lpsz
或 bstrSrc
的 BSTR 成员追加到 m_str
。
HRESULT Append(const CComBSTR& bstrSrc) throw();
HRESULT Append(wchar_t ch) throw();
HRESULT Append(char ch) throw();
HRESULT Append(LPCOLESTR lpsz) throw();
HRESULT Append(LPCSTR lpsz) throw();
HRESULT Append(LPCOLESTR lpsz, int nLen) throw();
参数
bstrSrc
[in] 要追加的 CComBSTR
对象。
ch
[in] 要追加的字符。
lpsz
[in] 要追加的以零结尾的字符串。 可以通过 LPCOLESTR
重载传递 Unicode 字符串,或通过 LPCSTR
版本传递 ANSI 字符串。
nLen
[in] lpsz
中要追加的字符数。
返回值
返回 S_OK
(如果成功),或返回任何标准 HRESULT
错误值。
备注
在追加 ANSI 字符串之前会将其转换为 Unicode。
示例
enum { urlASP, urlHTM, urlISAPI } urlType;
urlType = urlASP;
CComBSTR bstrURL = OLESTR("http://SomeSite/");
CComBSTR bstrDEF = OLESTR("/OtherSite");
CComBSTR bstrASP = OLESTR("default.asp");
CComBSTR bstrTemp;
HRESULT hr;
switch (urlType)
{
case urlASP:
// bstrURL is 'http://SomeSite/default.asp'
hr = bstrURL.Append(bstrASP);
break;
case urlHTM:
// bstrURL is 'http://SomeSite/default.htm'
hr = bstrURL.Append(OLESTR("default.htm"));
break;
case urlISAPI:
// bstrURL is 'http://SomeSite/default.dll?func'
hr = bstrURL.Append(OLESTR("default.dll?func"));
break;
default:
// bstrTemp is 'http://'
hr = bstrTemp.Append(bstrURL, 7);
// bstrURL is 'http://OtherSite'
if (hr == S_OK)
hr = bstrTemp.Append(bstrDEF);
bstrURL = bstrTemp;
break;
}
CComBSTR::AppendBSTR
将指定的 BSTR
追加到 m_str
。
HRESULT AppendBSTR(BSTR p) throw();
参数
p
[in] 要追加的 BSTR
。
返回值
返回 S_OK
(如果成功),或返回任何标准 HRESULT
错误值。
备注
不要将普通宽字符串传递给此方法。 编译器无法捕获错误,并且会发生运行时错误。
示例
CComBSTR bstrPre(OLESTR("Hello "));
CComBSTR bstrSuf(OLESTR("World!"));
HRESULT hr;
// Appends "World!" to "Hello "
hr = bstrPre.AppendBSTR(bstrSuf);
// Displays a message box with text "Hello World!"
::MessageBox(NULL, CW2CT(bstrPre), NULL, MB_OK);
CComBSTR::AppendBytes
在不进行转换的情况下将指定数量的字节追加到 m_str
。
HRESULT AppendBytes(const char* lpsz, int nLen) throw();
参数
lpsz
[in] 指向要追加的字节数组的指针。
p
[in] 要追加的字节数。
返回值
返回 S_OK
(如果成功),或返回任何标准 HRESULT
错误值。
示例
CComBSTR bstrPre(OLESTR("Hello "));
HRESULT hr;
// Appends "Wo" to "Hello " (4 bytes == 2 characters)
hr = bstrPre.AppendBytes(reinterpret_cast<char*>(OLESTR("World!")), 4);
// Displays a message box with text "Hello Wo"
::MessageBox(NULL, CW2CT(bstrPre), NULL, MB_OK);
CComBSTR::ArrayToBSTR
释放 CComBSTR
对象中保存的任何现有字符串,然后从 safearray 中每个元素的第一个字符创建 BSTR
并将其附加到 CComBSTR
对象。
HRESULT ArrayToBSTR(const SAFEARRAY* pSrc) throw();
参数
pSrc
[in] 包含用于创建字符串的元素的 safearray。
返回值
返回 S_OK
(如果成功),或返回任何标准 HRESULT
错误值。
CComBSTR::AssignBSTR
将 BSTR
分配到 m_str
。
HRESULT AssignBSTR(const BSTR bstrSrc) throw();
参数
bstrSrc
[in] 要分配到当前 CComBSTR
对象的 BSTR。
返回值
返回 S_OK
(如果成功),或返回任何标准 HRESULT
错误值。
CComBSTR::Attach
通过将 m_str
成员设置为 src
,将 BSTR
附加到 CComBSTR
对象。
void Attach(BSTR src) throw();
参数
src
[in] 要附加到对象的 BSTR
。
注解
不要将普通宽字符串传递给此方法。 编译器无法捕获错误,并且会发生运行时错误。
注意
此方法将断言 m_str
是否不为 NULL。
示例
// STDMETHOD(BSTRToUpper)(/*[in, out]*/ BSTR bstrConv);
STDMETHODIMP InplaceBSTRToUpper(BSTR bstrConv)
{
// Assign bstrConv to m_str member of CComBSTR
CComBSTR bstrTemp;
bstrTemp.Attach(bstrConv);
// Make sure BSTR is not NULL string
if (!bstrTemp)
return E_POINTER;
// Make string uppercase
HRESULT hr;
hr = bstrTemp.ToUpper();
if (hr != S_OK)
return hr;
// Set m_str to NULL, so the BSTR is not freed
bstrTemp.Detach();
return S_OK;
}
CComBSTR::BSTRToArray
创建一个从零开始的一维 safearray,该数组的每个元素是 CComBSTR
对象中的一个字符。
HRESULT BSTRToArray(LPSAFEARRAY* ppArray) throw();
参数
ppArray
[out] 指向用于保存函数结果的 safearray 的指针。
返回值
返回 S_OK
(如果成功),或返回任何标准 HRESULT
错误值。
CComBSTR::ByteLength
返回 m_str
中的字节数,不包括结尾的 null 字符。
unsigned int ByteLength() const throw();
返回值
m_str
成员的长度(以字节为单位)。
备注
如果 m_str
为 NULL
,则返回 0。
示例
// string with 11 chars (22 bytes)
CComBSTR bstrTemp(OLESTR("Hello World"));
unsigned int len = bstrTemp.ByteLength();
ATLASSERT(len == 22);
CComBSTR::CComBSTR
构造函数。 默认构造函数将 m_str
成员设置为 NULL
。
CComBSTR() throw();
CComBSTR(const CComBSTR& src);
CComBSTR(REFGUID guid);
CComBSTR(int nSize);
CComBSTR(int nSize, LPCOLESTR sz);
CComBSTR(int nSize, LPCSTR sz);
CComBSTR(LPCOLESTR pSrc);
CComBSTR(LPCSTR pSrc);
CComBSTR(CComBSTR&& src) throw(); // (Visual Studio 2017)
参数
nSize
[in] 要从 sz
复制的字符数,或 CComBSTR
的字符的初始大小。
sz
[in] 要复制的一个字符串。 Unicode 版本指定 LPCOLESTR
;ANSI 版本指定 LPCSTR。
pSrc
[in] 要复制的一个字符串。 Unicode 版本指定 LPCOLESTR
;ANSI 版本指定 LPCSTR。
src
[in] 一个 CComBSTR
对象。
guid
[in] 对 GUID
结构的引用。
备注
复制构造函数将 m_str
设置为 src
的 BSTR 成员的副本。 REFGUID
构造函数使用 StringFromGUID2
将 GUID 转换为字符串并存储结果。
其他构造函数将 m_str
设置为指定字符串的副本。 如果传递 nSize
的值,则只会复制 nSize
字符,后接一个结尾 null 字符。
CComBSTR
支持移动语义。 可以使用移动构造函数(采用右值引用 (&&
) 来创建新对象的构造函数,该新对象使用与你作为自变量传入的旧对象相同的基础数据,而无需复制对象的开销。
析构函数释放由 m_str
指向的字符串。
示例
CComBSTR bstr1; // BSTR points to NULL
bstr1 = "Bye"; // initialize with assignment operator
// ANSI string is converted to wide char
OLECHAR* str = OLESTR("Bye bye!"); // wide char string of length 5
int len = (int)wcslen(str);
CComBSTR bstr2(len + 1);// unintialized BSTR of length 6
wcsncpy_s(bstr2.m_str, bstr2.Length(), str, len); // copy wide char string to BSTR
CComBSTR bstr3(5, OLESTR("Hello World")); // BSTR containing 'Hello',
// input string is wide char
CComBSTR bstr4(5, "Hello World"); // same as above, input string
// is ANSI
CComBSTR bstr5(OLESTR("Hey there")); // BSTR containing 'Hey there',
// input string is wide char
CComBSTR bstr6("Hey there"); // same as above, input string
// is ANSI
CComBSTR bstr7(bstr6); // copy constructor, bstr7 contains 'Hey there'
CComBSTR::~CComBSTR
析构函数。
~CComBSTR();
备注
析构函数释放由 m_str
指向的字符串。
CComBSTR::Copy
分配并返回 m_str
的副本。
BSTR Copy() const throw();
返回值
m_str
成员的副本。 如果 m_str
为 NULL
,则返回 NULL
。
示例
CComBSTR m_bstrURL; // BSTR representing a URL
// put_URL is the put method for the URL property.
STDMETHOD(put_URL)(BSTR strURL)
{
ATLTRACE(_T("put_URL\n"));
// free existing string in m_bstrURL & make a copy
// of strURL pointed to by m_bstrURL
m_bstrURL = strURL;
return S_OK;
}
// get_URL is the get method for the URL property.
STDMETHOD(get_URL)(BSTR* pstrURL)
{
ATLTRACE(_T("get_URL\n"));
// make a copy of m_bstrURL pointed to by pstrURL
*pstrURL = m_bstrURL.Copy(); // See CComBSTR::CopyTo
return S_OK;
}
CComBSTR::CopyTo
通过参数分配并返回 m_str
的副本。
HRESULT CopyTo(BSTR* pbstr) throw();
HRESULT CopyTo(VARIANT* pvarDest) throw();
参数
pbstr
[out] 要在其中返回此方法分配的字符串的 BSTR
的地址。
pvarDest
[out] 要在其中返回此方法分配的字符串的 VARIANT
的地址。
返回值
指示复制成功或失败结果的标准 HRESULT
值。
注解
调用此方法后,pvarDest
指向的 VARIANT
的类型将是 VT_BSTR
。
示例
CComBSTR m_bstrURL; // BSTR representing a URL
// get_URL is the get method for the URL property.
STDMETHOD(get_URL)(BSTR* pstrURL)
{
// Make a copy of m_bstrURL and return it via pstrURL
return m_bstrURL.CopyTo(pstrURL);
}
CComBSTR::Detach
从 CComBSTR
对象中分离 m_str
并将 m_str
设置为 NULL
。
BSTR Detach() throw();
返回值
与 BSTR
对象关联的 CComBSTR
。
示例
// Method which converts bstrIn to uppercase
STDMETHODIMP BSTRToUpper(BSTR bstrIn, BSTR* pbstrOut)
{
if (bstrIn == NULL || pbstrOut == NULL)
return E_POINTER;
// Create a temporary copy of bstrIn
CComBSTR bstrTemp(bstrIn);
if (!bstrTemp)
return E_OUTOFMEMORY;
// Make string uppercase
HRESULT hr;
hr = bstrTemp.ToUpper();
if (hr != S_OK)
return hr;
// Return m_str member of bstrTemp
*pbstrOut = bstrTemp.Detach();
return S_OK;
}
CComBSTR::Empty
释放 m_str
成员。
void Empty() throw();
示例
CComBSTR bstr(OLESTR("abc"));
// Calls SysFreeString to free the BSTR
bstr.Empty();
ATLASSERT(bstr.Length() == 0);
CComBSTR::Length
返回 m_str
中的字符数,不包括结尾的 null 字符。
unsigned int Length() const throw();
返回值
m_str
成员的长度。
示例
// string with 11 chars
CComBSTR bstrTemp(OLESTR("Hello World"));
unsigned int len = bstrTemp.Length();
ATLASSERT(len == 11);
CComBSTR::LoadString
加载 nID
指定的字符串资源并将其存储在此对象中。
bool LoadString(HINSTANCE hInst, UINT nID) throw();
bool LoadString(UINT nID) throw();
参数
请参阅 Windows SDK 中的LoadString
。
返回值
如果字符串加载成功,则返回 TRUE
;否则返回 FALSE
。
注解
第一个函数通过 hInst
参数从你标识的模块加载资源。 第二个函数从与此项目中使用的 CComModule
派生对象关联的资源模块加载资源。
示例
CComBSTR bstrTemp;
// IDS_PROJNAME proj name stored as resource in string table
bstrTemp.LoadString(IDS_PROJNAME);
// the above is equivalent to:
// bstrTemp.LoadString(_Module.m_hInstResource, IDS_PROJNAME);
// display message box w/ proj name as title & text
::MessageBox(NULL, CW2CT(bstrTemp), CW2CT(bstrTemp), MB_OK);
CComBSTR::m_str
包含与 CComBSTR
对象关联的 BSTR
。
BSTR m_str;
示例
CComBSTR GuidToBSTR(REFGUID guid)
{
// 39 - length of string representation of GUID + 1
CComBSTR b(39);
// Convert GUID to BSTR
// m_str member of CComBSTR is of type BSTR. When BSTR param
// is required, pass the m_str member explicitly or use implicit
// BSTR cast operator.
int nRet = StringFromGUID2(guid, b.m_str, 39);
// Above equivalent to:
// int nRet = StringFromGUID2(guid, b, 39);
// implicit BSTR cast operator used for 2nd param
// Both lines are equivalent to:
// CComBSTR b(guid);
// CComBSTR constructor can convert GUIDs
ATLASSERT(nRet);
return b;
}
CComBSTR::operator BSTR
将 CComBSTR
对象强制转换为 BSTR
。
operator BSTR() const throw();
备注
允许将 CComBSTR
对象传递给具有 [in] BSTR
参数的函数。
示例
请参阅 CComBSTR::m_str
的示例。
CComBSTR::operator !
检查 BSTR
字符串是否为 NULL
。
bool operator!() const throw();
返回值
如果 m_str
成员是 NULL
,则返回 TRUE
;否则返回 FALSE
。
注解
此运算符仅检查 NULL
值,而不检查空字符串。
示例
// STDMETHOD(BSTRToUpper)(/*[in, out]*/ BSTR bstrConv);
STDMETHODIMP InplaceBSTRToUpper(BSTR bstrConv)
{
// Assign bstrConv to m_str member of CComBSTR
CComBSTR bstrTemp;
bstrTemp.Attach(bstrConv);
// Make sure BSTR is not NULL string
if (!bstrTemp)
return E_POINTER;
// Make string uppercase
HRESULT hr;
hr = bstrTemp.ToUpper();
if (hr != S_OK)
return hr;
// Set m_str to NULL, so the BSTR is not freed
bstrTemp.Detach();
return S_OK;
}
CComBSTR::operator !=
返回 operator ==
的逻辑求反结果。
bool operator!= (const CComBSTR& bstrSrc) const throw();
bool operator!= (LPCOLESTR pszSrc) const;
bool operator!= (LPCSTR pszSrc) const;
bool operator!= (int nNull) const throw();
参数
bstrSrc
[in] 一个 CComBSTR
对象。
pszSrc
[in] 一个以零结尾的字符串。
nNull
[in] 必须为 NULL。
返回值
如果所要比较的项不等于 CComBSTR
对象,则返回 TRUE
;否则返回 FALSE
。
注解
在用户的默认区域设置上下文中对 CComBSTR
进行文本比较。 最后的比较运算符只会将包含的字符串与 NULL
进行比较。
CComBSTR::operator &
返回存储在 m_str
成员中的 BSTR
的地址。
BSTR* operator&() throw();
备注
CComBstr operator &
有一个关联的特殊断言用于帮助识别内存泄漏。 程序将在初始化 m_str
成员时断言。 创建此断言是为了识别编程器使用 & operator
为 m_str
成员赋新值且不释放 m_str
的首次分配的情况。 如果 m_str
等于 NULL
,则程序假设 m_str 尚未分配。 在这种情况下,程序不会断言。
默认未启用此断言。 定义 ATL_CCOMBSTR_ADDRESS_OF_ASSERT
以启用此断言。
示例
#define ATL_NO_CCOMBSTR_ADDRESS_OF_ASSERT
void MyInitFunction(BSTR* pbstr)
{
::SysReAllocString(pbstr, OLESTR("Hello World"));
return;
}
CComBSTR bstrStr ;
// bstrStr is not initialized so this call will not assert.
MyInitFunction(&bstrStr);
CComBSTR bstrStr2(OLESTR("Hello World"));
// bstrStr2 is initialized so this call will assert.
::SysReAllocString(&bstrStr2, OLESTR("Bye"));
CComBSTR::operator +=
将字符串追加到 CComBSTR
对象。
CComBSTR& operator+= (const CComBSTR& bstrSrc);
CComBSTR& operator+= (const LPCOLESTR pszSrc);
参数
bstrSrc
[in] 要追加的 CComBSTR
对象。
pszSrc
[in] 要追加的以零结尾的字符串。
备注
在用户的默认区域设置上下文中对 CComBSTR
进行文本比较。 LPCOLESTR
比较是使用 memcmp
对每个字符串中的原始数据执行的。 创建 pszSrc
的临时 Unicode 副本后,将以相同的方式执行 LPCSTR
比较。 最后的比较运算符只会将包含的字符串与 NULL
进行比较。
示例
CComBSTR bstrPre(OLESTR("Hello "));
CComBSTR bstrSuf(OLESTR("World!"));
// Appends "World!" to "Hello "
bstrPre += bstrSuf;
// Displays a message box with text "Hello World!"
::MessageBox(NULL, CW2CT(bstrPre), NULL, MB_OK);
CComBSTR::operator <
将 CComBSTR
与某个字符串进行比较。
bool operator<(const CComBSTR& bstrSrc) const throw();
bool operator<(LPCOLESTR pszSrc) const throw();
bool operator<(LPCSTR pszSrc) const throw();
返回值
如果所要比较的项小于 CComBSTR
对象,则返回 TRUE
;否则返回 FALSE
。
备注
使用用户的默认区域设置执行比较。
CComBSTR::operator =
将 m_str
成员设置为 pSrc
的副本,或 src
的 BSTR
成员的副本。 移动赋值运算符移动 src
而不复制它。
CComBSTR& operator= (const CComBSTR& src);
CComBSTR& operator= (LPCOLESTR pSrc);
CComBSTR& operator= (LPCSTR pSrc);
CComBSTR& operator= (CComBSTR&& src) throw(); // (Visual Studio 2017)
注解
pSrc
参数为 Unicode 版本指定 LPCOLESTR
,或为 ANSI 版本指定 LPCSTR
。
示例
请参阅 CComBSTR::Copy
的示例。
CComBSTR::operator ==
将 CComBSTR
与某个字符串进行比较。 在用户的默认区域设置上下文中对 CComBSTR
进行文本比较。
bool operator== (const CComBSTR& bstrSrc) const throw();
bool operator== (LPCOLESTR pszSrc) const;
bool operator== (LPCSTR pszSrc) const;
bool operator== (int nNull) const throw();
参数
bstrSrc
[in] 一个 CComBSTR
对象。
pszSrc
[in] 一个以零结尾的字符串。
nNull
[in] 必须为 NULL
。
返回值
如果所要比较的项等于 CComBSTR
对象,则返回 TRUE
;否则返回 FALSE
。
备注
最后的比较运算符只会将包含的字符串与 NULL
进行比较。
CComBSTR::operator >
将 CComBSTR
与某个字符串进行比较。
bool operator>(const CComBSTR& bstrSrc) const throw();
返回值
如果所要比较的项大于 CComBSTR
对象,则返回 TRUE
;否则返回 FALSE
。
备注
使用用户的默认区域设置执行比较。
CComBSTR::ReadFromStream
将 m_str
成员设置为指定的流中包含的 BSTR
。
HRESULT ReadFromStream(IStream* pStream) throw();
参数
pStream
[in] 指向包含数据的流中的 IStream
接口的指针。
返回值
标准 HRESULT
值。
备注
ReadToStream
要求位于当前位置的流内容与通过 WriteToStream
调用写出的数据格式兼容。
示例
IDataObject* pDataObj;
// Fill in the FORMATETC struct to retrieve desired format
// from clipboard
FORMATETC formatetcIn = {CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_ISTREAM};
STGMEDIUM medium;
ZeroMemory(&medium, sizeof(STGMEDIUM));
// Get IDataObject from clipboard
HRESULT hr = ::OleGetClipboard(&pDataObj);
// Retrieve data from clipboard
hr = pDataObj->GetData(&formatetcIn, &medium);
if (SUCCEEDED(hr) && medium.tymed == TYMED_ISTREAM)
{
CComBSTR bstrStr;
// Get BSTR out of the stream
hr = bstrStr.ReadFromStream(medium.pstm);
//release the stream
::ReleaseStgMedium(&medium);
}
CComBSTR::ToLower
将包含的字符串转换为小写。
HRESULT ToLower() throw();
返回值
标准 HRESULT
值。
备注
有关如何执行转换的详细信息,请参阅 CharLowerBuff
。
CComBSTR::ToUpper
将包含的字符串转换为大写。
HRESULT ToUpper() throw();
返回值
标准 HRESULT
值。
备注
有关如何执行转换的详细信息,请参阅 CharUpperBuff
。
CComBSTR::WriteToStream
将 m_str
成员保存到流。
HRESULT WriteToStream(IStream* pStream) throw();
参数
pStream
[in] 指向流中 IStream
接口的指针。
返回值
标准 HRESULT
值。
备注
可以使用 ReadFromStream
函数从流的内容重新创建 BSTR
。
示例
//implementation of IDataObject::GetData()
STDMETHODIMP CMyDataObj::GetData(FORMATETC *pformatetcIn, STGMEDIUM *pmedium)
{
HRESULT hr = S_OK;
if (pformatetcIn->cfFormat == CF_TEXT && pformatetcIn->tymed == TYMED_ISTREAM)
{
IStream *pStm;
// Create an IStream from global memory
hr = CreateStreamOnHGlobal(NULL, TRUE, &pStm);
if (FAILED(hr))
return hr;
// Initialize CComBSTR
CComBSTR bstrStr = OLESTR("Hello World");
// Serialize string into stream
// the length followed by actual string is serialized into stream
hr = bstrStr.WriteToStream(pStm);
// Pass the IStream pointer back through STGMEDIUM struct
pmedium->tymed = TYMED_ISTREAM;
pmedium->pstm = pStm;
pmedium->pUnkForRelease = NULL;
}
return hr;
}