본문 바로가기

프로그래밍/공부관련

CString -> LPTSTR

출처 : http://www.rkttu.com/rkttublog/entry/17-CString%C0%BB-LPTSTR%B7%CE

 

사실, MFC 함수에서는 의외로 많은 곳에서 LPTSTR 타입이 쓰입니다. 그런데 CString 변수가지고 그냥 캐스팅 연산자를 곧장 대입할 수는 없습니다. 왜냐하면, CString은 클래스이고 LPTSTR은 const unsigned char* 형식이거든요. 그렇다면, 어떻게 하면 좋을까요?

CString의 멤버 함수 중에는 이 문제를 해결할 수 있는 두 가지 중요한 것이 있습니다.

CString::GetBuffer()

CString::GetBufferLength()

이것을 활용하여 CString을 LPTSTR로 바꿀 수가 있습니다. 실제로 적용되는 예제를 볼까요?

CString prData;

prData.Format("Example");

LPTSTR Conversion;

Conversion = prData.GetBuffer(prData.GetLength());

AfxMessageBox(Conversion);

코드 분석을 하나씩 해보도록 하지요.

1라인에서 CString 타입의 prData라는 변수를 생성하였습니다. 그리고 2라인에서는 prData의 형식과 실제 내용을 지정하는 CString::Format()을 사용하였지요. 3라인에서는 CString에서 가지고 올 내용을 담을 LPTSTR 변수 Conversion을 생성하였습니다.

4라인이 가장 중요한 구문입니다.

prData의 멤버 함수 중 GetBuffer를 사용하였는데 여기서 GetBuffer는 LPTSTR Conversion에 얼마만큼의 내용을 꺼내올거냐 하는 파라미터를 요구하게 됩니다. 두 가지 방법을 사용하실 수 있습니다.

해당 버퍼 길이값의 재활용을 계속 원하실 때에는 int형으로 따로 변수를 잡아서 미리 길이를 받아두도록 하세요. 그러나 1회용이라면 좀 더 간소하게 직접 prData.GetBufferLength() 라고 파라미터 안에다가 써넣으시면 됩니다.

올바르게 변환이 되었는지를 알아보기 위하여 5라인에서는 AfxMessageBox()를 사용하여 출력해 보았습니다. 올바르게 출력이 된다면 정상적으로 변환이 이루어 진 것입니다.

참고 사항 한 가지, LPTSTR은 LPSTR과는 다르게도 유니코드 기반하에 데이터를 처리한다는 점을 알아두십시오. LPTSTR은 한국어, 중국어, 일본어와 같은 2바이트 계열의 아시아권 언어나 2바이트 계열의 유럽권 언어를 지원합니다. 실제로 위에서 "한국" 이라고 CString에 지정하고 테스트해보면 올바르게 변환된다는 것을 확인하실 수 있습니다.


'프로그래밍 > 공부관련' 카테고리의 다른 글

sscanf  (0) 2010.05.18
스트링 형변환 정리  (0) 2010.05.17
ShellExecute Function  (1) 2010.05.09
Direct X - Direct Input  (0) 2010.05.08
CString 에서 Char*  (0) 2010.05.08