Compartir a través de


Clase CComBSTR

Esta clase es un contenedor para BSTRs.

Sintaxis

class CComBSTR

Miembros

Constructores públicos

Nombre Descripción
CComBSTR::CComBSTR Constructor .
CComBSTR::~CComBSTR El destructor .

Métodos públicos

Nombre Descripción
CComBSTR::Append Anexa una cadena a m_str.
CComBSTR::AppendBSTR Anexa un BSTR a m_str.
CComBSTR::AppendBytes Anexa un número especificado de bytes a m_str.
CComBSTR::ArrayToBSTR Crea un BSTR a partir del primer carácter de cada elemento de safearray y lo adjunta al objeto CComBSTR.
CComBSTR::AssignBSTR Asigna un objeto BSTR a m_str.
CComBSTR::Attach Adjunta un elemento BSTR al objeto CComBSTR.
CComBSTR::BSTRToArray Crea una caja segura unidimensional de base cero, donde cada elemento de la matriz es un carácter del objeto CComBSTR.
CComBSTR::ByteLength Devuelve la longitud de m_str en bytes.
CComBSTR::Copy Devuelve una copia de m_str.
CComBSTR::CopyTo Devuelve una copia de m_str mediante un parámetro [out].
CComBSTR::Detach Desasocia m_str del objeto CComBSTR.
CComBSTR::Empty Libera m_str.
CComBSTR::Length Devuelve la longitud de m_str.
CComBSTR::LoadString Carga un recurso de cadena.
CComBSTR::ReadFromStream Carga un objeto BSTR de una secuencia.
CComBSTR::ToLower Convierte la cadena a minúsculas.
CComBSTR::ToUpper Convierte la cadena a mayúsculas.
CComBSTR::WriteToStream Guarda m_str en una secuencia.

Operadores públicos

Nombre Descripción
CComBSTR::operator BSTR Convierte un objeto CComBSTR en un BSTR.
CComBSTR::operator ! Devuelve TRUE o FALSE, en función de si m_str es null.
CComBSTR::operator != Compara un objeto CComBSTR con una cadena.
CComBSTR::operator & Devuelve la dirección de m_str.
CComBSTR::operator += Anexa un CComBSTR al objeto.
CComBSTR::operator < Compara un objeto CComBSTR con una cadena.
CComBSTR::operator = Asigna un valor a m_str.
CComBSTR::operator == Compara un objeto CComBSTR con una cadena.
CComBSTR::operator > Compara un objeto CComBSTR con una cadena.

Miembros de datos públicos

Nombre Descripción
CComBSTR::m_str Contiene el objeto BSTR asociado al objeto CComBSTR.

Comentarios

La clase CComBSTR es un contenedor para BSTR, que son cadenas con prefijo de longitud. La longitud se almacena como un entero en la ubicación de memoria que precede a los datos de la cadena.

Un objeto BSTR termina en null después del último carácter contado, pero también puede contener caracteres null insertados dentro de la cadena. La longitud de la cadena viene determinada por el recuento de caracteres, no por el primer carácter nulo.

Nota:

La clase CComBSTR proporciona una serie de miembros (constructores, operadores de asignación y operadores de comparación) que toman cadenas ANSI o Unicode como argumentos. Las versiones ANSI de estas funciones son menos eficaces que sus homólogos Unicode, ya que las cadenas Unicode temporales a menudo se crean internamente. Para mejorar la eficacia, use las versiones Unicode siempre que sea posible.

Nota:

Debido al comportamiento de búsqueda mejorado implementado en Visual Studio .NET, el código como bstr = L"String2" + bstr;, que puede haber compilado en versiones anteriores, debe implementarse como bstr = CStringW(L"String2") + bstr.

Para obtener una lista de precauciones al usar CComBSTR, consulte Programación con CComBSTR.

Requisitos

Encabezado: atlbase.h

CComBSTR::Append

Anexa lpsz o el miembro BSTR de bstrSrc a 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();

Parámetros

bstrSrc
[in] Objeto CComBSTR que se va a anexar.

ch
[in] Carácter que se va a anexar.

lpsz
[in] Cadena de caracteres terminada en cero que se va a anexar. Puede pasar una cadena Unicode a través de la sobrecarga LPCOLESTR o una cadena ANSI a través de la versión LPCSTR.

nLen
Número de caracteres de lpsz que se van a anexar.

Valor devuelto

S_OK si se ejecuta correctamente o cualquier valor de error estándar HRESULT.

Comentarios

Una cadena ANSI se convertirá en Unicode antes de anexarse.

Ejemplo

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

Anexa el BSTR especificado a m_str.

HRESULT AppendBSTR(BSTR p) throw();

Parámetros

p
[in] BSTR que se va a anexar.

Valor devuelto

S_OK si se ejecuta correctamente o cualquier valor de error estándar HRESULT.

Comentarios

No pase una cadena de caracteres anchos normal a este método. El compilador no puede detectar el error y se producirán errores en tiempo de ejecución.

Ejemplo

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

Anexa el número especificado de bytes a m_str sin conversión.

HRESULT AppendBytes(const char* lpsz, int nLen) throw();

Parámetros

lpsz
[in] Puntero a una matriz de bytes que se va a anexar.

p
[in] Número de bytes que se van a anexar.

Valor devuelto

S_OK si se ejecuta correctamente o cualquier valor de error estándar HRESULT.

Ejemplo

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

Libera cualquier cadena existente que se mantenga en el objeto CComBSTR y, a continuación, crea un BSTR a partir del primer carácter de cada elemento de safearray y lo adjunta al objeto CComBSTR.

HRESULT ArrayToBSTR(const SAFEARRAY* pSrc) throw();

Parámetros

pSrc
[in] Safearray que contiene los elementos utilizados para crear la cadena.

Valor devuelto

S_OK si se ejecuta correctamente o cualquier valor de error estándar HRESULT.

CComBSTR::AssignBSTR

Asigna un objeto BSTR a m_str.

HRESULT AssignBSTR(const BSTR bstrSrc) throw();

Parámetros

bstrSrc
[in] BSTR que se va a asignar al objeto actual CComBSTR.

Valor devuelto

S_OK si se ejecuta correctamente o cualquier valor de error estándar HRESULT.

CComBSTR::Attach

Adjunta un objeto BSTR al objeto CComBSTR estableciendo el miembro m_str en src.

void Attach(BSTR src) throw();

Parámetros

src
[in] BSTR que se va a adjuntar al objeto .

Comentarios

No pase una cadena de caracteres anchos normal a este método. El compilador no puede detectar el error y se producirán errores en tiempo de ejecución.

Nota:

Este método afirmará si m_str no es null.

Ejemplo

// 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

Crea una caja segura unidimensional de base cero, donde cada elemento de la matriz es un carácter del objeto CComBSTR.

HRESULT BSTRToArray(LPSAFEARRAY* ppArray) throw();

Parámetros

ppArray
[out] Puntero al objeto safearray usado para contener los resultados de la función.

Valor devuelto

S_OK si se ejecuta correctamente o cualquier valor de error estándar HRESULT.

CComBSTR::ByteLength

Devuelve el número de bytes en m_str, excluido el carácter null de terminación.

unsigned int ByteLength() const throw();

Valor devuelto

Longitud del miembro m_str en bytes.

Comentarios

Devuelve 0 si m_str es NULL.

Ejemplo

// string with 11 chars (22 bytes)
CComBSTR bstrTemp(OLESTR("Hello World"));

unsigned int len = bstrTemp.ByteLength();

ATLASSERT(len == 22);   

CComBSTR::CComBSTR

Constructor . El constructor predeterminado establece el miembro m_str en 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)

Parámetros

nSize
[in] El número de caracteres que se deben copiar de sz o el tamaño inicial en caracteres para CComBSTR.

sz
[in] Cadena que se va a copiar. La versión Unicode especifica un LPCOLESTR y la versión ANSI, un LPCSTR.

pSrc
[in] Cadena que se va a copiar. La versión Unicode especifica un LPCOLESTR y la versión ANSI, un LPCSTR.

src
[in] Objeto CComBSTR.

guid
[in] Referencia a una estructura GUID.

Comentarios

El constructor de copia establece m_str en una copia del miembro de src. El constructor REFGUID convierte el GUID en una cadena con StringFromGUID2 y almacena el resultado.

Los otros constructores establecen m_str en una copia de la cadena especificada. Si se pasa un valor para nSize, solo se copiarán nSize caracteres, seguidos de un carácter nulo.

CComBSTR admite la semántica de transferencia de recursos. Puede usar el constructor de movimiento (el constructor que toma una referencia de valor R (&&) para crear un objeto nuevo que utiliza los mismos datos subyacentes que el objeto antiguo que se pasa como argumento, sin la sobrecarga a la hora de copiar el objeto.

El destructor libera la cadena a la que apunta m_str.

Ejemplo

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

El destructor .

~CComBSTR();

Comentarios

El destructor libera la cadena a la que apunta m_str.

CComBSTR::Copy

Asigna y devuelve una copia de m_str.

BSTR Copy() const throw();

Valor devuelto

Copia del miembro m_str. Si m_str es NULL, devuelve NULL.

Ejemplo

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

Asigna y devuelve una copia de m_str a través del parámetro.

HRESULT CopyTo(BSTR* pbstr) throw();

HRESULT CopyTo(VARIANT* pvarDest) throw();

Parámetros

pbstr
[out] Dirección de un objeto BSTR en el que se va a devolver la cadena asignada por este método.

pvarDest
[out] Dirección de un objeto VARIANT en el que se va a devolver la cadena asignada por este método.

Valor devuelto

Valor estándar HRESULT que indica el éxito o error de la copia.

Comentarios

Después de llamar a este método, el objeto VARIANT al que apunta el pvarDest será de tipo VT_BSTR.

Ejemplo

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

Desasocia m_str del objeto CComBSTR y establece m_str en NULL.

BSTR Detach() throw();

Valor devuelto

Objeto BSTR asociado al objeto CComBSTR.

Ejemplo

// 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

Libera el miembro m_str.

void Empty() throw();

Ejemplo

CComBSTR bstr(OLESTR("abc"));

// Calls SysFreeString to free the BSTR
bstr.Empty();
ATLASSERT(bstr.Length() == 0);   

CComBSTR::Length

Devuelve el número de caracteres de m_str, sin incluir el carácter nulo finalizado.

unsigned int Length() const throw();

Valor devuelto

Longitud del miembro m_str.

Ejemplo

// string with 11 chars
CComBSTR bstrTemp(OLESTR("Hello World"));

unsigned int len = bstrTemp.Length();

ATLASSERT(len == 11);

CComBSTR::LoadString

Carga un recurso de cadena especificado por nID y lo almacena en este objeto.

bool LoadString(HINSTANCE hInst, UINT nID) throw();
bool LoadString(UINT nID) throw();

Parámetros

Consulte el método LoadString de Windows SDK.

Valor devuelto

Devuelve TRUE si la cadena se carga correctamente; de lo contrario, devuelve FALSE.

Comentarios

La primera función carga el recurso del módulo identificado a través del parámetro hInst. La segunda función carga el recurso del módulo de recursos asociado al objeto CComModule derivado de que se usa en este proyecto.

Ejemplo

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

Contiene el objeto BSTR asociado al objeto CComBSTR.

BSTR m_str;

Ejemplo

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

Convierte un objeto CComBSTR en un BSTR.

operator BSTR() const throw();

Comentarios

Permite pasar objetos CComBSTR a funciones que tienen parámetros [in] BSTR.

Ejemplo

Vea el ejemplo de CComBSTR::m_str.

CComBSTR::operator !

Comprueba si la cadena BSTR está NULL.

bool operator!() const throw();

Valor devuelto

Devuelve TRUE si el miembro m_str es NULL; en caso contrario, FALSE.

Comentarios

Este operador solo comprueba si hay un valor NULL, no para una cadena vacía.

Ejemplo

// 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 !=

Devuelve el opuesto lógico de operator ==.

bool operator!= (const CComBSTR& bstrSrc) const throw();
bool operator!= (LPCOLESTR pszSrc) const;
bool operator!= (LPCSTR pszSrc) const;
bool operator!= (int nNull) const throw();

Parámetros

bstrSrc
[in] Objeto CComBSTR.

pszSrc
[in] Cadena terminada en cero.

nNull
[in] Debe ser null.

Valor devuelto

Devuelve TRUE si el elemento que se compara no es igual al objeto CComBSTR; de lo contrario, devuelve FALSE.

Comentarios

Los objetos CComBSTR se comparan textualmente en el contexto de la configuración regional predeterminada del usuario. El operador de comparación final simplemente compara la cadena contenida con NULL.

CComBSTR::operator &

Devuelve la dirección del objeto BSTR almacenado en el miembro m_str.

BSTR* operator&() throw();

Comentarios

CComBstr operator & tiene una aserción especial asociada para ayudar a identificar fugas de memoria. El programa se declarará cuando se inicialice el miembro m_str. Esta aserción se creó para identificar situaciones en las que un programador usa & operator para asignar un nuevo valor al miembro m_str sin liberar la primera asignación de m_str. Si m_str es igual a NULL, el programa supone que todavía no se asignó m_str. En este caso, el programa no se afirmará.

Esta aserción no está habilitada de forma predeterminada. Defina ATL_CCOMBSTR_ADDRESS_OF_ASSERT para habilitar esta aserción.

Ejemplo

#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 +=

Anexa una cadena al objeto CComBSTR.

CComBSTR& operator+= (const CComBSTR& bstrSrc);
CComBSTR& operator+= (const LPCOLESTR pszSrc);

Parámetros

bstrSrc
[in] Objeto CComBSTR que se va a anexar.

pszSrc
[in] Cadena terminada en cero que se va a anexar.

Comentarios

Los objetos CComBSTR se comparan textualmente en el contexto de la configuración regional predeterminada del usuario. La comparación LPCOLESTR se realiza mediante memcmp en los datos sin procesar de cada cadena. La comparación LPCSTR se realiza de la misma manera una vez creada una copia Unicode temporal de pszSrc. El operador de comparación final simplemente compara la cadena contenida con NULL.

Ejemplo

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 <

Compara un objeto CComBSTR con una cadena.

bool operator<(const CComBSTR& bstrSrc) const throw();
bool operator<(LPCOLESTR pszSrc) const throw();
bool operator<(LPCSTR pszSrc) const throw();

Valor devuelto

Devuelve TRUE si el elemento que se va a comparar es menor que el objeto CComBSTR; de lo contrario, devuelve FALSE.

Comentarios

La comparación se realiza mediante la configuración regional predeterminada del usuario.

CComBSTR::operator =

Establece el miembro m_str en una copia de pSrc o en una copia del miembro BSTR de src. El operador de asignación de movimiento se mueve src sin copiarlo.

CComBSTR& operator= (const CComBSTR& src);
CComBSTR& operator= (LPCOLESTR pSrc);
CComBSTR& operator= (LPCSTR pSrc);
CComBSTR& operator= (CComBSTR&& src) throw(); // (Visual Studio 2017)

Comentarios

El parámetro pSrc especifica un objeto LPCOLESTR para las versiones Unicode o LPCSTR para las versiones ANSI.

Ejemplo

Vea el ejemplo de CComBSTR::Copy.

CComBSTR::operator ==

Compara un objeto CComBSTR con una cadena. Los objetos CComBSTR se comparan textualmente en el contexto de la configuración regional predeterminada del usuario.

bool operator== (const CComBSTR& bstrSrc) const throw();
bool operator== (LPCOLESTR pszSrc) const;
bool operator== (LPCSTR pszSrc) const;
bool operator== (int nNull) const throw();

Parámetros

bstrSrc
[in] Objeto CComBSTR.

pszSrc
[in] Cadena terminada en cero.

nNull
[in] Debe ser NULL.

Valor devuelto

Devuelve TRUE si el elemento que se va a comparar es igual al objeto CComBSTR; de lo contrario, devuelve FALSE.

Comentarios

El operador de comparación final simplemente compara la cadena contenida con NULL.

CComBSTR::operator >

Compara un objeto CComBSTR con una cadena.

bool operator>(const CComBSTR& bstrSrc) const throw();

Valor devuelto

Devuelve TRUE si el elemento que se va a comparar es mayor que el objeto CComBSTR; de lo contrario, devuelve FALSE.

Comentarios

La comparación se realiza mediante la configuración regional predeterminada del usuario.

CComBSTR::ReadFromStream

Establece el miembro m_str en el BSTR contenido de la secuencia especificada.

HRESULT ReadFromStream(IStream* pStream) throw();

Parámetros

pStream
[in] Puntero a la interfaz IStream de la secuencia que contiene los datos.

Valor devuelto

Un valor HRESULT estándar.

Comentarios

ReadToStream requiere que el contenido de la secuencia en la posición actual sea compatible con el formato de datos escrito por una llamada a WriteToStream.

Ejemplo

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

Cambia la cadena especificada a minúsculas.

HRESULT ToLower() throw();

Valor devuelto

Un valor HRESULT estándar.

Comentarios

Consulte CharLowerBuff para obtener más información sobre cómo se realiza la conversión.

CComBSTR::ToUpper

Convierte la cadena contenida en mayúsculas.

HRESULT ToUpper() throw();

Valor devuelto

Un valor HRESULT estándar.

Comentarios

Consulte CharUpperBuff para obtener más información sobre cómo se realiza la conversión.

CComBSTR::WriteToStream

Guarda el miembro m_str en una secuencia.

HRESULT WriteToStream(IStream* pStream) throw();

Parámetros

pStream
[in] Puntero a la interfaz IStream de una secuencia.

Valor devuelto

Un valor HRESULT estándar.

Comentarios

Puede volver a crear un BSTR a partir del contenido de la secuencia mediante la función ReadFromStream.

Ejemplo

//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;
}

Vea también

Información general sobre la clase
Macros de conversión de cadenas ATL y MFC