C++ Topics and Explanations
Re: Converting BSTR to CString

[ Follow Ups ] [ Post Follow Up ] [ C++ Topics and Explanations ]

Posted by Bruce Leggett on December 22, 204 at 06:47:58:

In Reply to: Re: Converting BSTR to CString posted by William Baldwin on November 10, 203 at 08:17:05:

If you want the entire string and not just the first character assigned to CString use an uppercase S instead of a lower case s.

Example:

cstrString.Format(_T("%S"), (LPCTSTR)bstrString);

Glad to help,
-Bruce

: : I want to know the easy method to convert BSTR to CString

: : -sr

: BSTR GetBSTR()
: {
: _bstr_t bstr1(_T("This is the test string."));

: BSTR bstr;

: bstr = bstr1.copy();

: return bstr;
: }


:
: CComBSTR GetComBSTR()
: {
: CComBSTR bstr("This is the test string.");

: return bstr;
: }

:
: void CVbsDlg::ShowBSTR(BSTR bstr)
: {
: _bstr_t bstrStart(bstr);

: CString s;

: s.Format(_T("%s"), (LPCTSTR)bstrStart);

: AfxMessageBox(s);

: }

: Conversions
: So, let's get to it. Here are the conversion techniques:

: Converting BSTR to _bstr_t
: // BSTR to _bst_t

: BSTR bstrStart = GetBSTR();

: // use the constructor
: _bstr_t bstrFinal(bstrStart);

: ShowBSTR(bstrFinal);

: // Use the = operator
: bstrFinal = bstrStart;

: ShowBSTR(bstrFinal);

: Converting a _bstr_t to BSTR

: You may want to get a BSTR from a _bstr_t class.

: // _bstr_t to BSTR

: _bstr_t bstrStart(_T("This is the test string."));

: BSTR bstrFinish;

: // use _bstr_t::copy member function
: bstrFinish = bstrStart.copy();

: ShowBSTR(bstrFinish);

: // use = operator
: bstrFinish = bstrStart;

: ShowBSTR(bstrFinish);

: Converting a CComBSTR to BSTR

: You may want to get a BSTR from a CComBSTR class.

: // CComBSTR to BSTR
: CComBSTR bstrStart(_T("This is the test string."));

: BSTR bstrFinish;

: // use the = operator
: bstrFinish = bstrStart;

: ShowBSTR(bstrFinish);

: // use the Copy member function
: bstrFinish = bstrStart.Copy();

: ShowBSTR(bstrFinish);

: Converting _bstr_t to CComBSTR

: // _bstr_t to CComBSTR
: _bstr_t bstrStart(_T("This is the test string."));

: CComBSTR bstrFinish;

: bstrFinish.AppendBSTR(bstrStart);

: ShowBSTR(bstrFinish);

: Converting BSTR to C String

: (Note: conversion that only works in Unicode)

: // BSTR to C String

: BSTR bstrStart;

: bstrStart = GetBSTR();

: TCHAR szFinal[255];

: // direct conversion from BSTR to LPCTSTR only works
: // in Unicode
: _stprintf(szFinal, _T("%s"), (LPCTSTR)bstrStart);
: AfxMessageBox(szFinal);

: _bstr_t bstrIntermediate(bstrStart); // convert to
: // _bstr_t
: CString strFinal;

: // you have to go through _bstr_t to have it work in ANSI
: // and Unicode
: _stprintf(szFinal, _T("%s"), (LPCTSTR)bstrIntermediate);

: // Or, using MFC

: strFinal.Format(_T("%s"), (LPCTSTR)bstrIntermediate);

: AfxMessageBox(strFinal);

: Converting _bstr_t to C String

: (this works in both ANSI and Unicode)

: _bstr_t bstrStart(_T("This is the test string."));
: TCHAR szFinal[255];

: _stprintf(szFinal, _T("%s"), (LPCTSTR)bstrStart);

: AfxMessageBox(szFinal);

: Converting CComBSTR to LPCTSTR

: (not possible; must go through _bstr_t)

: // CComBSTR to C String
: CComBSTR bstrStart("This is the test string.");

: _bstr_t bstrIntermediate(bstrStart);

: TCHAR szFinal[255];

: _stprintf(szFinal, _T("%s"),
: (LPCTSTR)bstrIntermediate);

: AfxMessageBox(szFinal);

: Converting LPCTSTR to _bstr_t

: Use a constructor or = operator

: // LPCTSTR to _bstr_t

: LPCTSTR szStart = _T("This is the text string");

: // Use the constructor
: _bstr_t bstrFinal(szStart);

: ShowBSTR(bstrFinal);

: // or use = operator
: bstrFinal = szStart;

: ShowBSTR(bstrFinal);

: Converting LPCTSTR to CComBSTR

: Use a constructor or CComBSTR::Append function

: // LPCTSTR to CComBSTR

: // Use a constructor

: LPCTSTR szStart = _T("This is the text string");

: // Use the constructor
: CComBSTR bstrFinal(szStart);

: ShowBSTR(bstrFinal);

: // Or use the Append function
: bstrFinal.Empty();
: bstrFinal.Append(szStart);

: ShowBSTR(bstrFinal);




Follow Ups:


Post a Follow Up:

Name:
E-Mail:

Subject:

Comments:


[ Follow Ups ] [ Post Follow Up ] [ C++ Topics and Explanations ]