I need to convert a CString
instance into a properly allocated BSTR
and pass that BSTR
into a COM method. To have code that compiles a
One of _bstr_t
constructors allows you to simply attach to existing BSTR
so that you can have the exception that you want from CString::AllocSysString
when BSTR
allocation fails.
// _bstr_t simply attaches to BSTR, doesn't reallocate it
interface->CallMethod( _bstr_t(sourceString.AllocSysString(), false) );
The _bstr_t constructor documentation says:
_bstr_t(
BSTR bstr,
bool fCopy
);
fCopy
If false, thebstr
argument is attached to the new object without making a copy by callingSysAllocString
.
On the other hand, CComBSTR constructor doesn't seem to have the corresponding signature; although it can be used as well if BSTR
allocation failure exception is not really needed, as mentioned by Phil Booth in his answer.