_bstr_t
ANSI/Unicode をネイティブに処理するMicrosoft 固有のクラスを使用します。何かのようなもの
#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;
}
仕事をするべきです。