플랫폼(platform)에 독립적으로 사용할 수 있는 라이브러리(library)인 COM(Component Object Model)에서 사용하는 문자열 형태는 BSTR(Basic string or binary string)이다. BSTR은 이름에서도 알 수 있듯이 Visual Basic에서 사용하는 문자열 형식이다. 이를 Visual C++에서 쓰려면 아래 형태가 되어야 한다.
BSTR str = ::SysAllocString(L"TestString"); // BSTR에 메모리(memory) 할당_bstr_t clsStr = str; // BSTR의 캡슐 클래스(encapsulation class) 선언CString sText = (LPCTSTR)clsStr; // BSTR을 CString으로 변환
캡슐 클래스인 _bstr_t을 사용하지 않으면 BSTR의 메모리 할당(SysAllocString 함수)과 해제(SysFreeString 함수)를 본인이 직접해야 한다. 이게 귀찮으면 그냥 _bstr_t에 할당해서 BSTR을 사용하면 쉽다. BSTR은 thread에 안전한 문자열 형태는 아니므로 multithread 환경인 경우는 아래 code가 더 안전하다. Debug assertion이 뜨는 경우는 아래 형태를 반드시 사용해야 한다.
BSTR str = ::SysAllocString(L"TestString");_bstr_t clsStr(str, true); // BSTR을 복사해서 캡슐 클래스 생성::SysFreeString(str); // BSTR의 메모리 해제 CString sText = (LPCTSTR)clsStr;
댓글 없음 :
댓글 쓰기
욕설이나 스팸글은 삭제될 수 있습니다. [전파거북이]는 선플운동의 아름다운 인터넷을 지지합니다.