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 |
0 から始まる 1 次元の 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 文字ではなく、文字数によって決まります。
Note
CComBSTR
クラスには、引数として ANSI 文字列または Unicode 文字列を取る多数のメンバー (コンストラクター、代入演算子、および比較演算子) が用意されています。 一時的な Unicode 文字列は多くの場合、内部的に作成されるため、これらの関数の ANSI バージョンは、Unicode の対応する関数よりも効率が悪くなります。 効率を上げるには、可能な限り Unicode バージョンを使用します。
Note
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
[入力] 追加する CComBSTR
オブジェクト。
ch
[入力] 追加する文字。
lpsz
[入力] 追加する 0 で終わる文字列。 LPCOLESTR
オーバーロードを使用して Unicode 文字列を渡すことも、LPCSTR
バージョンを使用して ANSI 文字列を渡すこともできます。
nLen
[入力] 追加する 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
[入力] 追加する 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
[入力] 追加するバイト配列へのポインター。
p
[入力] 追加するバイト数。
戻り値
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
[入力] 文字列の作成に使用される要素を含む safearray。
戻り値
S_OK
(成功した場合) または標準 HRESULT
エラー値。
CComBSTR::AssignBSTR
BSTR
を m_str
に代入します。
HRESULT AssignBSTR(const BSTR bstrSrc) throw();
パラメーター
bstrSrc
[入力] 現在の CComBSTR
オブジェクトに代入する BSTR。
戻り値
S_OK
(成功した場合) または標準 HRESULT
エラー値。
CComBSTR::Attach
m_str
メンバーを src
に設定して、BSTR
を CComBSTR
オブジェクトにアタッチします。
void Attach(BSTR src) throw();
パラメーター
src
[入力] オブジェクトにアタッチする BSTR
。
解説
通常のワイド文字列をこのメソッドに渡さないでください。 コンパイラではエラーをキャッチできず、実行時エラーが発生します。
Note
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
0 から始まる 1 次元の safearray を作成します。この場合、配列の各要素は CComBSTR
オブジェクトの文字です。
HRESULT BSTRToArray(LPSAFEARRAY* ppArray) throw();
パラメーター
ppArray
[出力] 関数の結果を保持するために使用される safearray へのポインター。
戻り値
S_OK
(成功した場合) または標準 HRESULT
エラー値。
CComBSTR::ByteLength
終端の null 文字を除き、m_str
のバイト数を返します。
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
[入力] sz
からコピーする文字数、または CComBSTR
の文字の初期サイズ。
sz
[入力] コピーする文字列。 Unicode バージョンでは LPCOLESTR
を指定し、ANSI バージョンでは LPCSTR を指定します。
pSrc
[入力] コピーする文字列。 Unicode バージョンでは LPCOLESTR
を指定し、ANSI バージョンでは LPCSTR を指定します。
src
[入力] CComBSTR
オブジェクト。
guid
[入力] 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
[出力] このメソッドによって割り当てられた文字列を返す BSTR
のアドレス。
pvarDest
[出力] このメソッドによって割り当てられた文字列を返す 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
終端の null 文字を除き、m_str
の文字数を返します。
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
パラメーターを使用して、ユーザーによって識別されたモジュールからリソースを読み込みます。 2 番目の関数では、このプロジェクトで使用される 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();
解説
[in] BSTR
パラメーターを持つ関数に CComBSTR
オブジェクトを渡すことができます。
例
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
[入力] CComBSTR
オブジェクト。
pszSrc
[入力] 0 で終わる文字列。
nNull
[入力] 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
[入力] 追加する CComBSTR
オブジェクト。
pszSrc
[入力] 追加する 0 で終わる文字列。
解説
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
パラメーターでは、LPCOLESTR
(Unicode バージョンの場合) または LPCSTR
(ANSI バージョンの場合) を指定します。
例
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
[入力] CComBSTR
オブジェクト。
pszSrc
[入力] 0 で終わる文字列。
nNull
[入力] 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
[入力] データを含むストリームの 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
[入力] ストリームの 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;
}