기본적으로 ANSI/유니 코드를 처리하는 Microsoft 특정 _bstr_t
클래스를 사용하십시오. 예 :
#include <comutils.h>
// ...
void MyClass::MyFunction(BSTR text)
{
_bstr_t name = "Name: " + _bstr_t(text, true);
m_classMember = (LPCSTR)name;
}
거의 원하는 것입니다. 그러나 언급에 의해 지적 된 바와 같이, 당신은 m_classMember
과 concatened 문자열의 수명을 관리해야합니다. 위의 예에서 코드는 충돌 할 가능성이 높습니다.
class MyClass {
private:
_bstr_t m_concatened;
//...
};
을 다음 m_concatened
의 문자열 내용에 대한 포인터로 m_classMember
를 사용 : 당신이 MyClass
객체를 소유하고 있다면
, 당신은 단순히 다른 멤버 변수를 추가 할 수 있습니다.
void MyClass::MyFunction(BSTR text)
{
m_concatened = "Name: " + _bstr_t(text, true);
m_classMember = (LPCSTR)m_concatened;
}
그렇지 않으면, m_classMember
의 할당하기 전에, 당신은 당신이 그것을 할당 같은 방법으로 (free
, delete []
등)에서 무료, 당신은 concatened의 콘텐츠를 복사하는 새로운 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;
}
등의 작업을 수행해야합니다.
이 클래스의 멤버입니다. LPCSTR입니다. 여기에서 사용해야하는 것은 –
입니다. 아무 것도 가리키고 있지 않습니다. –