원본 : http://www.debuglab.com/knowledge/stringconversion.html
1.요약
ATL/MFC에서 공통적으로 제공하고 있는 문자열 변환 매크로에 대해서 살짝 알아보고, 사용법을 정리합니다.
2.본문
COM에서 사용하는 문자열은 크게 2가지가 있습니다.
한가지-> OLECHAR
두가지-> BSTR
-----------------------------------------------------------------
OLECHAR은 다음과 같이 정의됩니다.
Win32,Solaris --> wchar_t Win16,Mac --> char
하지만 무엇보다도 중요한 점은 실제 OLECHAR의 타입이 무엇인지는 중요하지 않다는 점입니다.
-----------------------------------------------------------------
BSTR은 단순히 OLESTR 앞에 문자열의 길이를 저장하는 타입입니다.
-----------------------------------------------------------------
문자열 변환 매크로는 아주 명확한 이름을 가지고 있습니다.
매크로에서 쓰이는 다음과 같은 축약어는 다음의 뜻을 가지고 있습니다.
T --> TCHAR 포인터 = LPTSTR
W --> wchar_t 포인터 = LPWSTR
A --> MBCS/ANSI 포인터 = LPSTR
OLE --> OLECHAR 포인터 = LPOLESTR
C --> const
-----------------------------------------------------------------
만약에 TCHAR 문자열을 OLECHAR 문자열로 변경하고 싶으시다면 다음과 같은 예를 참고하십시오
STDMETHODIMP put_Name( /* [in] */ const OLECHAR* pName);
void SetName( LPTSTR lpsz)
{
USES_CONVERSION;
...
pObj->put_Name( T2OLE(lpsz));
}
USES_VONVERSION
문자열 변환 매크로를 사용하실때 한 번 써주시면 됩니다.
T2OLE(lpsz)
TCHAR 를 OLECHAR로 바꾸겠다는 의미심장한 각오를 느낄 수 있습니다.
---------------------------------------------------------------
단, 다른 타입의 문자열에서 BSTR 문자열로 바꾸실때만 약간의 제약이 있습니다. 문자열 변환에 사용한 버퍼를 직접 비워주어야 한다는 점입니다. 다음 참고 하십시오.
void SetName(LPTSTR lpsz)
{
USES_CONVERSION;
...
BSTR bstr = T2BSTR(lpsz);
pObj->put_Name(bstr);
::SysFreeString(bstr); // 여기요
}
----------------------------------------------------------------
MSDN 에서 다음 토픽을 참조하시면 큰 도움이 될거라 믿습니다.
TN059: Using MFC MBCS/Unicode Conversion Macros
3.예제
4.참고
ATL Internals
- 2001.08.13 Smile Seo -
- 웹페이지가 이동될때 진입하는 함수 (0)2007/03/17
- ActiveX를 무조건 다운로드 하게 하기 (0)2007/03/15
- String Conversion Macro (0)2007/03/08
- Unicode/MBCS(DBCS)/ANSI/TCHAR (0)2007/03/05
- [ATL] 새로운 인터페이스 추가하기 (0)2007/03/05

수안이의 컴퓨터 연구실



Leave your greetings.