使用微软特定的_bstr_t http://msdn.microsoft.com/en-us/library/zthfhkd6%28v=vs.71%29.aspx类,它本身处理 ANSI/Unicode。就像是
#include <comutils.h>
// ...
void MyClass::MyFunction(BSTR text)
{
_bstr_t name = "Name: " + _bstr_t(text, true);
m_classMember = (LPCSTR)name;
}
就是你几乎想要的。然而,正如评论所指出的,你必须管理m_classMember
和连接的字符串。在上面的例子中,代码很可能会崩溃。
如果您拥有MyClass
对象,您可以简单地添加另一个成员变量:
class MyClass {
private:
_bstr_t m_concatened;
//...
};
然后使用m_classMember
作为指向字符串内容的指针m_concatened
.
void MyClass::MyFunction(BSTR text)
{
m_concatened = "Name: " + _bstr_t(text, true);
m_classMember = (LPCSTR)m_concatened;
}
否则,在分配之前m_classMember
,您应该以与分配它相同的方式释放它(free
, delete []
等),并创建一个新的char*
数组,您可以在其中复制连接字符串的内容。就像是
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;
}
应该做这项工作。