I have a class function which is receving a BSTR. In my class I have a member variable which is LPCSTR. Now I need to append BSTR ins LPCSTR. How I can do that. Here is my function.
void MyClass::MyFunction(BSTR text)
{
LPCSTR name = "Name: ";
m_classMember = name + text; // m_classMember is LPCSTR.
}
in my m_classMember I want that after this function value should be "Name: text_received_in_function". How i can do that.
Use the Microsoft specific _bstr_t
class, which handles the ANSI/Unicode natively. Something like
#include <comutils.h>
// ...
void MyClass::MyFunction(BSTR text)
{
_bstr_t name = "Name: " + _bstr_t(text, true);
m_classMember = (LPCSTR)name;
}
is what you almost want. However, as pointed out by the remarks, you have to manage the lifetime of m_classMember
and the concatened string. In the example above, the code is likely to crash.
If you own the MyClass
object, you could simply add another member variable:
class MyClass {
private:
_bstr_t m_concatened;
//...
};
and then use m_classMember
as a pointer to the string content of m_concatened
.
void MyClass::MyFunction(BSTR text)
{
m_concatened = "Name: " + _bstr_t(text, true);
m_classMember = (LPCSTR)m_concatened;
}
Otherwise, prior to the assignment of m_classMember
, you should free it in the same way you allocated it (free
, delete []
, etc), and create a new char*
array in which you copy the content of the concatened string. Something like
void MyClass::MyFunction(BSTR text)
{
_bstr_t name = "Name: " + _bstr_t(text, true);
// in case it was previously allocated with 'new'
// should be initialized to 0 in the constructor
delete [] m_classMember;
m_classMember = new char[name.length() + 1];
strcpy_s(m_classMember, name.length(), (LPCSTR)name);
m_classMember[name.length()] = 0;
}
should do the work.