Compartilhar via


Classe CComBSTR

Essa classe é um wrapper para BSTRs.

Sintaxe

class CComBSTR

Membros

Construtores públicos

Nome Descrição
CComBSTR::CComBSTR O construtor .
CComBSTR::~CComBSTR O destruidor.

Métodos públicos

Nome Descrição
CComBSTR::Append Acrescenta uma cadeia de caracteres a m_str.
CComBSTR::AppendBSTR Acrescenta um BSTR a m_str.
CComBSTR::AppendBytes Acrescenta um número especificado de bytes a m_str.
CComBSTR::ArrayToBSTR Cria um BSTR do primeiro caractere de cada elemento no safearray e o anexa ao objeto CComBSTR.
CComBSTR::AssignBSTR Atribui um BSTR a m_str.
CComBSTR::Attach Anexa um BSTR ao objeto CComBSTR.
CComBSTR::BSTRToArray Cria uma safearray unidimensional baseada em zero, em que cada elemento da matriz é um caractere do objeto CComBSTR.
CComBSTR::ByteLength Retorna o comprimento de m_str em bytes.
CComBSTR::Copy Retorna uma cópia de m_str.
CComBSTR::CopyTo Retorna uma cópia de m_str por meio de um parâmetro [out]
CComBSTR::Detach Desanexa m_str do objeto CComBSTR.
CComBSTR::Empty Libera m_str.
CComBSTR::Length Retorna o comprimento de m_str.
CComBSTR::LoadString Carrega um recurso de cadeia de caracteres.
CComBSTR::ReadFromStream Carrega um objeto BSTR de um fluxo.
CComBSTR::ToLower Converte a cadeia de caracteres em minúsculas.
CComBSTR::ToUpper Converte a cadeia de caracteres em maiúsculas.
CComBSTR::WriteToStream Salva m_str em um fluxo.

Operadores públicos

Nome Descrição
CComBSTR::operator BSTR Converte um objeto CComBSTR em um BSTR.
CComBSTR::operator ! Retorna TRUE ou FALSE, dependendo se m_str é NULL.
CComBSTR::operator != Compara um CComBSTR com uma cadeia de caracteres.
CComBSTR::operator & Retorna o endereço de m_str.
CComBSTR::operator += Acrescenta um CComBSTR ao objeto.
CComBSTR::operator < Compara um CComBSTR com uma cadeia de caracteres.
CComBSTR::operator = Atribui um valor a m_str.
CComBSTR::operator == Compara um CComBSTR com uma cadeia de caracteres.
CComBSTR::operator > Compara um CComBSTR com uma cadeia de caracteres.

Membros de Dados Públicos

Nome Descrição
CComBSTR::m_str Contém o BSTR associado ao objeto CComBSTR.

Comentários

A classe CComBSTR é um wrapper para BSTRs, que são cadeias de caracteres com prefixo de comprimento. O comprimento deve ser armazenado como um inteiro no local da memória que precede os dados na cadeia de caracteres.

Um BSTR é terminado por null depois do último caractere contado, mas também pode conter caracteres nulos embutidos na cadeia de caracteres. O comprimento da cadeia de caracteres é determinado pela contagem de caracteres, não pelo primeiro caractere nulo.

Observação

A classe CComBSTR fornece vários membros (construtores, operadores de atribuição e operadores de comparação) que tomam cadeias de caracteres ANSI ou Unicode como argumentos. As versões ANSI dessas funções são menos eficientes do que seus equivalentes Unicode, porque cadeias de caracteres Unicode temporárias geralmente são criadas internamente. Para obter eficiência, use as versões Unicode sempre que possível.

Observação

Devido ao comportamento de pesquisa aprimorado implementado no .NET do Visual Studio, código como bstr = L"String2" + bstr;, que pode ter sido compilado em versões anteriores, deve ser implementado como bstr = CStringW(L"String2") + bstr.

Para obter uma lista de precauções ao usar CComBSTR, consulte Programação com CComBSTR.

Requisitos

Cabeçalho: atlbase.h

CComBSTR::Append

Acrescenta lpsz ou o membro 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] Um objeto CComBSTR a ser acrescentado.

ch
[in] Um caractere a ser acrescentado.

lpsz
[in] Uma cadeia de caracteres terminada por zero a ser acrescentada. Você pode passar uma cadeia de caracteres Unicode por meio da sobrecarga LPCOLESTR ou uma cadeia de caracteres ANSI por meio da versão LPCSTR.

nLen
[in] O número de caracteres em lpsz a serem acrescentados.

Valor de retorno

S_OK em êxito ou qualquer valor de erro padrão HRESULT.

Comentários

Uma cadeia de caracteres ANSI será convertida em Unicode antes de ser acrescentada.

Exemplo

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

Acrescenta o BSTR especificado a m_str.

HRESULT AppendBSTR(BSTR p) throw();

Parâmetros

p
[in] Um BSTR a acrescentar.

Valor de retorno

S_OK em êxito ou qualquer valor de erro padrão HRESULT.

Comentários

Não passe uma cadeia de caracteres larga comum para este método. O compilador não pode capturar o erro e ocorrerão erros de tempo de execução.

Exemplo

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

Acrescenta o número especificado de bytes a m_str sem conversão.

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

Parâmetros

lpsz
[in] Um ponteiro para uma matriz de bytes a serem acrescentados.

p
[in] O número de bytes a acrescentar.

Valor de retorno

S_OK em êxito ou qualquer valor de erro padrão HRESULT.

Exemplo

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 qualquer cadeia de caracteres existente mantida no objeto CComBSTR e, em seguida, cria um BSTR a partir do primeiro caractere de cada elemento na safearray e anexa-o ao objeto CComBSTR.

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

Parâmetros

pSrc
[in] A safearray que contém os elementos usados para criar a cadeia de caracteres.

Valor de retorno

S_OK em êxito ou qualquer valor de erro padrão HRESULT.

CComBSTR::AssignBSTR

Atribui um BSTR a m_str.

HRESULT AssignBSTR(const BSTR bstrSrc) throw();

Parâmetros

bstrSrc
[in] Um BSTR a ser atribuído ao objeto CComBSTR atual.

Valor de retorno

S_OK em êxito ou qualquer valor de erro padrão HRESULT.

CComBSTR::Attach

Atribui um BSTR ao objeto CComBSTR definindo o membro m_str como src.

void Attach(BSTR src) throw();

Parâmetros

src
[in] O BSTR a anexar ao objeto.

Comentários

Não passe uma cadeia de caracteres larga comum para este método. O compilador não pode capturar o erro e ocorrerão erros de tempo de execução.

Observação

Esse método será declarado se m_str não for NULL.

Exemplo

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

Cria uma safearray unidimensional baseada em zero, em que cada elemento da matriz é um caractere do objeto CComBSTR.

HRESULT BSTRToArray(LPSAFEARRAY* ppArray) throw();

Parâmetros

ppArray
[out] O ponteiro para a safearray usado para manter os resultados da função.

Valor de retorno

S_OK em êxito ou qualquer valor de erro padrão HRESULT.

CComBSTR::ByteLength

Retorna o número de bytes em m_str, excluindo o caractere nulo de terminação.

unsigned int ByteLength() const throw();

Valor de retorno

O comprimento do membro m_str em bytes.

Comentários

Retorna 0 se m_str é NULL.

Exemplo

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

unsigned int len = bstrTemp.ByteLength();

ATLASSERT(len == 22);   

CComBSTR::CComBSTR

O construtor . O construtor padrão define o membro m_str como 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] O número de caracteres a serem copiados de sz ou o tamanho inicial em caracteres para o CComBSTR.

sz
[in] A cadeia de caracteres a ser copiada. A versão Unicode especifica um LPCOLESTR; a versão ANSI especifica um LPCSTR.

pSrc
[in] A cadeia de caracteres a ser copiada. A versão Unicode especifica um LPCOLESTR; a versão ANSI especifica um LPCSTR.

src
[in] Um objeto CComBSTR.

guid
[in] Uma referência a uma estrutura GUID.

Comentários

O construtor de cópia define m_str como uma cópia do membro BSTR de src. O construtor REFGUID converte o GUID em uma cadeia de caracteres usando StringFromGUID2 e armazena o resultado.

Os outros construtores definem m_str como uma cópia da cadeia de caracteres especificada. Se você passar um valor para nSize, somente nSize caracteres serão copiados, seguidos por um caractere nulo de terminação.

CComBSTR dá suporte à semântica de transferência de recursos. Você pode usar o construtor move (o construtor que usa uma referência rvalue (&&) para criar um novo objeto que usa os mesmos dados subjacentes que o objeto antigo que você passa como um argumento, sem a sobrecarga de copiar o objeto.

O destruidor libera a cadeia de caracteres apontada por m_str.

Exemplo

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

O destruidor.

~CComBSTR();

Comentários

O destruidor libera a cadeia de caracteres apontada por m_str.

CComBSTR::Copy

Aloca e retorna uma cópia de m_str.

BSTR Copy() const throw();

Valor de retorno

Uma cópia do membro m_str. Se m_str for NULL, retorna NULL.

Exemplo

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

Aloca e retorna uma cópia de m_str por meio do parâmetro.

HRESULT CopyTo(BSTR* pbstr) throw();

HRESULT CopyTo(VARIANT* pvarDest) throw();

Parâmetros

pbstr
[out] O endereço de um BSTR no qual retornar a cadeia de caracteres alocada por esse método.

pvarDest
[out] O endereço de um VARIANT no qual retornar a cadeia de caracteres alocada por esse método.

Valor de retorno

Um valor padrão HRESULT que indica o êxito ou a falha da cópia.

Comentários

Depois de chamar esse método, o VARIANT indicado por pvarDest será do tipo VT_BSTR.

Exemplo

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

Desanexa m_str do objeto CComBSTR e define m_str como NULL.

BSTR Detach() throw();

Valor de retorno

O BSTR associado ao objeto CComBSTR.

Exemplo

// 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 o membro m_str.

void Empty() throw();

Exemplo

CComBSTR bstr(OLESTR("abc"));

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

CComBSTR::Length

Retorna o número de caracteres em m_str, excluindo o caractere nulo de terminação.

unsigned int Length() const throw();

Valor de retorno

O comprimento do membro m_str.

Exemplo

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

unsigned int len = bstrTemp.Length();

ATLASSERT(len == 11);

CComBSTR::LoadString

Carrega um recurso de cadeia de caracteres especificado por nID e o armazena neste objeto.

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

Parâmetros

Consulte LoadString no SDK do Windows.

Valor de retorno

Retorna TRUE se a cadeia de caracteres for carregada com êxito; caso contrário, retorna FALSE.

Comentários

A primeira função carrega o recurso do módulo identificado por você por meio do parâmetro hInst. A segunda função carrega o recurso do módulo de recurso associado ao objeto derivado de CComModule usado neste projeto.

Exemplo

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

Contém o BSTR associado ao objeto CComBSTR.

BSTR m_str;

Exemplo

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

Converte um objeto CComBSTR em um BSTR.

operator BSTR() const throw();

Comentários

Permite que você passe objetos CComBSTR para funções que têm parâmetros [in] BSTR.

Exemplo

Confira o exemplo de CComBSTR::m_str.

CComBSTR::operator !

Verifica se a cadeia de caracteres BSTR é NULL.

bool operator!() const throw();

Valor de retorno

Retorna TRUE se o membro m_str é NULL; caso contrário, FALSE.

Comentários

Esse operador verifica apenas um valor NULL, não uma cadeia de caracteres vazia.

Exemplo

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

Retorna o oposto 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] Um objeto CComBSTR.

pszSrc
[in] Uma cadeia de caracteres terminada em zero.

nNull
[in] Precisa ser NULL.

Valor de retorno

Retornará TRUE se o item sendo comparado não for igual ao objeto CComBSTR. Caso contrário, retornará FALSE.

Comentários

CComBSTRs são comparados textualmente no contexto da localidade padrão do usuário. O operador de comparação final apenas compara a cadeia de caracteres contida com NULL.

CComBSTR::operator &

Retorna o endereço do BSTR armazenado no membro m_str.

BSTR* operator&() throw();

Comentários

CComBstr operator & tem uma declaração especial associada a ela para ajudar a identificar perda de memória. O programa será declarado quando o membro m_str for inicializado. Essa declaração foi criada para identificar situações em que um programador usa & operator para atribuir um novo valor ao membro m_str sem liberar a primeira alocação de m_str. Se m_str é igual NULL, o programa pressupõe que m_str ainda não foi alocado. Nesse caso, o programa não vai declarar.

Essa declaração não está habilitada por padrão. Defina ATL_CCOMBSTR_ADDRESS_OF_ASSERT para habilitar essa declaração.

Exemplo

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

Acrescenta uma cadeia de caracteres ao objeto CComBSTR.

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

Parâmetros

bstrSrc
[in] Um objeto CComBSTR a ser acrescentado.

pszSrc
[in] Uma cadeia de caracteres terminada em zero a ser acrescentada.

Comentários

CComBSTRs são comparados textualmente no contexto da localidade padrão do usuário. A comparação LPCOLESTR é feita usando memcmp nos dados brutos em cada cadeia de caracteres. A comparação LPCSTR é realizada da mesma forma depois que uma cópia temporária de Unicode de pszSrc é criada. O operador de comparação final apenas compara a cadeia de caracteres contida com NULL.

Exemplo

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 um CComBSTR com uma cadeia de caracteres.

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

Valor de retorno

Retornará TRUE se o item sendo comparado for menor que o objeto CComBSTR. Caso contrário, retornará FALSE.

Comentários

A comparação é executada usando a localidade padrão do usuário.

CComBSTR::operator =

Define o membro m_str como uma cópia de pSrc ou para uma cópia do membro BSTR de src. O operador de atribuição de movimentação move src sem copiá-lo.

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

Comentários

O parâmetro pSrc especifica LPCOLESTR para versões Unicode ou LPCSTR para versões ANSI.

Exemplo

Confira o exemplo de CComBSTR::Copy.

CComBSTR::operator ==

Compara um CComBSTR com uma cadeia de caracteres. CComBSTRs são comparados textualmente no contexto da localidade padrão do usuário.

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] Um objeto CComBSTR.

pszSrc
[in] Uma cadeia de caracteres terminada em zero.

nNull
[in] Deve ser NULL.

Valor de retorno

Retornará TRUE se o item sendo comparado for igual ao objeto CComBSTR. Caso contrário, retornará FALSE.

Comentários

O operador de comparação final apenas compara a cadeia de caracteres contida com NULL.

CComBSTR::operator >

Compara um CComBSTR com uma cadeia de caracteres.

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

Valor de retorno

Retornará TRUE se o item sendo comparado for maior que o objeto CComBSTR. Caso contrário, retornará FALSE.

Comentários

A comparação é executada usando a localidade padrão do usuário.

CComBSTR::ReadFromStream

Define o membro m_str para o BSTR contido no fluxo especificado.

HRESULT ReadFromStream(IStream* pStream) throw();

Parâmetros

pStream
[in] Um ponteiro para a interface IStream no fluxo que contém os dados.

Valor de retorno

Um valor HRESULT padrão.

Comentários

ReadToStream requer que o conteúdo do fluxo na posição atual seja compatível com o formato de dados gravado por uma chamada para WriteToStream.

Exemplo

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

Converte em minúsculas a cadeia de caracteres contida.

HRESULT ToLower() throw();

Valor de retorno

Um valor HRESULT padrão.

Comentários

Confira CharLowerBuff para mais informações sobre como a conversão é executada.

CComBSTR::ToUpper

Converte a cadeia de caracteres contida em maiúsculas.

HRESULT ToUpper() throw();

Valor de retorno

Um valor HRESULT padrão.

Comentários

Confira CharUpperBuff para mais informações sobre como a conversão é executada.

CComBSTR::WriteToStream

Salva o membro m_str em um fluxo.

HRESULT WriteToStream(IStream* pStream) throw();

Parâmetros

pStream
[in] Um ponteiro para a IStream interface em um fluxo.

Valor de retorno

Um valor HRESULT padrão.

Comentários

Você pode recriar um BSTR a partir do conteúdo do fluxo usando a função ReadFromStream.

Exemplo

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

Confira também

Visão geral da aula
Macros de conversão de cadeia de caracteres ATL e MFC