使用Microsoft特定的_bstr_t
類,該類自然處理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*
陣列,其中您複製concatened的內容串。類似於
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;
}
應該做的工作。
這是類的成員,它是LPCSTR,我應該在這裏使用, –
它沒有指向任何東西, –