Класс CComBSTR
Этот класс представляет собой оболочку для BSTR
s.
Синтаксис
class CComBSTR
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CComBSTR::CComBSTR |
Конструктор. |
CComBSTR::~CComBSTR |
Деструктор |
Открытые методы
Имя | Описание |
---|---|
CComBSTR::Append |
Добавляет строку в m_str . |
CComBSTR::AppendBSTR |
Добавляет объект BSTR m_str в . |
CComBSTR::AppendBytes |
Добавляет указанное число байтов в m_str . |
CComBSTR::ArrayToBSTR |
BSTR Создает из первого символа каждого элемента в safearray и присоединяет его к объектуCComBSTR . |
CComBSTR::AssignBSTR |
Присваивает объекту BSTR m_str . |
CComBSTR::Attach |
Присоединяет объект BSTR к объекту CComBSTR . |
CComBSTR::BSTRToArray |
Создает одномерный безопасный объект с нуля, где каждый элемент массива является символом из CComBSTR объекта. |
CComBSTR::ByteLength |
Возвращает длину m_str в байтах. |
CComBSTR::Copy |
Возвращает копию m_str . |
CComBSTR::CopyTo |
Возвращает копию m_str с помощью [out] параметра |
CComBSTR::Detach |
Отсоединяется m_str от CComBSTR объекта. |
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 ! |
Возвращает значение TRUE или FALSE в зависимости от того, имеет ли m_str значение NULL. |
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 |
Содержит связанный BSTR CComBSTR с объектом объект. |
Замечания
Класс CComBSTR
представляет собой оболочку для BSTR
s, которые являются строками с префиксом длины. Длина хранится в виде целого числа в расположении памяти перед данными в строке.
Значение BSTR
null завершается после последнего подсчитываемого символа, но может содержать пустые символы, внедренные в строку. Длина строки определяется числом символов, а не первым пустым символом.
Примечание.
Класс CComBSTR
предоставляет ряд элементов (конструкторов, операторов назначения и операторов сравнения), которые принимают строки ANSI или Юникод в качестве аргументов. Версии ANSI этих функций менее эффективны, чем их коллеги Юникода, так как временные строки Юникода часто создаются внутри системы. Для повышения эффективности используйте версии Юникода, где это возможно.
Примечание.
Из-за улучшенного поведения подстановки, реализованного в Visual Studio .NET, код, например bstr = L"String2" + bstr;
скомпилированный в предыдущих выпусках, должен быть реализован как bstr = CStringW(L"String2") + bstr
.
Список предостережений при использовании CComBSTR
см. в разделе "Программирование с CComBSTR
".
Требования
Заголовок: atlbase.h
CComBSTR::Append
lpsz
Добавляет элемент bstrSrc
m_str
BSTR в .
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
перегрузку или строку ANSI через LPCSTR
версию.
nLen
[in] Число символов из lpsz
добавления.
Возвращаемое значение
S_OK
при успешном выполнении или любом стандартном HRESULT
значении ошибки.
Замечания
Строка ANSI будет преобразована в Юникод перед добавлением.
Пример
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
, а затем создает BSTR
из первого символа каждого элемента в safearray и присоединяет его к объекту 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] BSTR для назначения текущему CComBSTR
объекту.
Возвращаемое значение
S_OK
при успешном выполнении или любом стандартном HRESULT
значении ошибки.
CComBSTR::Attach
Присоединяет объект BSTR
к объекту CComBSTR
m_str
, задав для элемента значение src
.
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
Создает одномерный безопасный объект с нуля, где каждый элемент массива является символом из CComBSTR
объекта.
HRESULT BSTRToArray(LPSAFEARRAY* ppArray) throw();
Параметры
ppArray
[out] Указатель на safearray, используемый для хранения результатов функции.
Возвращаемое значение
S_OK
при успешном выполнении или любом стандартном HRESULT
значении ошибки.
CComBSTR::ByteLength
Возвращает количество байтов m_str
, за исключением конца символа NULL.
unsigned int ByteLength() const throw();
Возвращаемое значение
Длина m_str
элемента в байтах.
Замечания
Возвращает значение 0, если m_str
имеет значение NULL
.
Пример
// 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
[входные данные] Строка для копирования. Версия Юникода указывает значение LPCOLESTR
; версия ANSI указывает LPCSTR.
pSrc
[входные данные] Строка для копирования. Версия Юникода указывает значение LPCOLESTR
; версия ANSI указывает LPCSTR.
src
[входные данные] Объект CComBSTR
.
guid
[in] Ссылка на структуру GUID
.
Замечания
Конструктор копирования задает m_str
копию элемента src
BSTR. Конструктор REFGUID
преобразует GUID в строку с помощью StringFromGUID2
и сохраняет результат.
Другие конструкторы присваивают m_str
копию указанной строки. Если вы передаете значение для nSize
, то копируются только nSize
символы, за которым следует завершающийся пустой символ.
CComBSTR
поддерживает семантику перемещения. Конструктор перемещения (принимающий ссылку rvalue (&&
)) можно использовать, чтобы создать объект, который использует те же базовые данные, что и старый объект, передаваемый как аргумент, без необходимости копировать объект.
Деструктор освобождает строку, на которую указывает 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
значение, указывающее на успешность или сбой копии.
Замечания
После вызова этого метода VARIANT
указывает pvarDest
на тип 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
Отсоединяется m_str
от CComBSTR
объекта и задает 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();
Параметры
См LoadString
. в пакете SDK для Windows.
Возвращаемое значение
Возвращает, 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
Содержит связанный BSTR
CComBSTR
с объектом объект.
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 !
Проверяет, является NULL
ли BSTR
строка.
bool operator!() const throw();
Возвращаемое значение
Возвращает значение TRUE
, m_str
если элемент имеет значение NULL
; в противном случае 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
[in] Строка, завершающаяся с нуля.
nNull
[in] Должно иметь значение NULL.
Возвращаемое значение
Возвращает, TRUE
если сравниваемый элемент не равен объекту CComBSTR
; в противном случае возвращается FALSE
.
Замечания
CComBSTR
s сравниваются текстовым образом в контексте языкового стандарта пользователя по умолчанию. Последний оператор сравнения просто сравнивает содержащуюся строку с NULL
.
CComBSTR::operator &
Возвращает адрес BSTR
хранящегося в элементе m_str
.
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
s сравниваются текстовым образом в контексте языкового стандарта пользователя по умолчанию. Сравнение LPCOLESTR
выполняется с использованием memcmp
необработанных данных в каждой строке. Сравнение LPCSTR
выполняется таким же образом, как только будет создана временная копия Юникода pszSrc
. Последний оператор сравнения просто сравнивает содержащуюся строку с 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();
Возвращаемое значение
Возвращает значение TRUE
, если сравниваемый элемент меньше CComBSTR
объекта; в противном случае возвращается FALSE
.
Замечания
Сравнение выполняется с помощью языкового стандарта пользователя по умолчанию.
CComBSTR::operator =
m_str
Задает участнику копию pSrc
или копию BSTR
элементаsrc
. Оператор назначения перемещения перемещается src
без копирования.
CComBSTR& operator= (const CComBSTR& src);
CComBSTR& operator= (LPCOLESTR pSrc);
CComBSTR& operator= (LPCSTR pSrc);
CComBSTR& operator= (CComBSTR&& src) throw(); // (Visual Studio 2017)
Замечания
Параметр pSrc
задает LPCOLESTR
версию Юникода или LPCSTR
для версий ANSI.
Пример
Пример см. в примере CComBSTR::Copy
.
CComBSTR::operator ==
Сравнивается CComBSTR
со строкой. CComBSTR
s сравниваются текстовым образом в контексте языкового стандарта пользователя по умолчанию.
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
[in] Строка, завершающаяся с нуля.
nNull
[in] Должно быть NULL
.
Возвращаемое значение
Возвращает значение TRUE
, если сравниваемый элемент равен объекту CComBSTR
; в противном случае возвращается FALSE
.
Замечания
Последний оператор сравнения просто сравнивает содержащуюся строку с NULL
.
CComBSTR::operator >
Сравнивается CComBSTR
со строкой.
bool operator>(const CComBSTR& bstrSrc) const throw();
Возвращаемое значение
Возвращает значение TRUE
, CComBSTR
если сравниваемый элемент больше объекта; в противном случае возвращается 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
.
Замечания
Вы можете повторно создать содержимое BSTR
потока с помощью ReadFromStream
функции.
Пример
//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;
}
См. также
Общие сведения о классе
Макросы преобразования строк ATL и MFC