Visual Studio .NET부터 유니코드 시스템이 기본 인코딩으로 되어 있다.
즉 TCHAR는 char 타입이 아니고 wchar_t 타입이다.
그런데 예전 소스코드들과 병행해서 사용하다보면 TCHAR 때문에 오류가 날 때가 많다.
그리고 컴파일러 설정에 따라 자동으로 타입을 바꿀 수 있도록 코딩하고 싶기도 하다.
프로젝트 설정의 _UNICODE define등을 조사해도 되겠지만
이건 순전히 프로젝트 설정에 따른 것이니 다른 버전의 개발환경이나 직접 만들어진 프로젝트에서는
기대하기 힘든 것이고..
그래서 이런 저런 방법을 궁리해보다가
현재의 프로젝트가 멀티바이트 기본인지, 유니코드 기본지를 알아내는 프리프로세서 구문을 만들었다.
유니코드는 한글이 한문자라는 것에 착안해서 TCHAR의 '가'와 유니코드의 '가'가 일치하는가를 조시하는 방법이다.
그래서 저 뒤에 나오는 코드는 다음과 같이 구분해서 작성할 수 있게 된다.
MessageBox는 유니코드 프로젝트에서는 MessageBoxW에 멀티바이트 프로젝트에서는 MessageBoxA에 연결되는데
위와 같이 현재 시스템에 맞춰서 LPCTSTR로 자동으로 변환해서 출력하도록 만들 수 있다.
즉 TCHAR는 char 타입이 아니고 wchar_t 타입이다.
그런데 예전 소스코드들과 병행해서 사용하다보면 TCHAR 때문에 오류가 날 때가 많다.
그리고 컴파일러 설정에 따라 자동으로 타입을 바꿀 수 있도록 코딩하고 싶기도 하다.
프로젝트 설정의 _UNICODE define등을 조사해도 되겠지만
이건 순전히 프로젝트 설정에 따른 것이니 다른 버전의 개발환경이나 직접 만들어진 프로젝트에서는
기대하기 힘든 것이고..
그래서 이런 저런 방법을 궁리해보다가
현재의 프로젝트가 멀티바이트 기본인지, 유니코드 기본지를 알아내는 프리프로세서 구문을 만들었다.
#include <tchar.h>
#pragma warning(push)
# pragma warning(disable:4066)
# if defined(_T) && (_T('가') == L'가')
# define UNICODE_SYSTEM
# else
# define MULTIBYTE_SYSTEM
# endif
#pragma warning(pop)
유니코드는 한글이 한문자라는 것에 착안해서 TCHAR의 '가'와 유니코드의 '가'가 일치하는가를 조시하는 방법이다.
그래서 저 뒤에 나오는 코드는 다음과 같이 구분해서 작성할 수 있게 된다.
class cStr
{
protected:
char* mbcs;
wchar_t* wcs;
public:
cStr() : mbcs(NULL), wcs(NULL) {}
...[중간 생략]...
operator const TCHAR*(void) const
{
# if UNICODE_SYSTEM
return wcs; // const wchar_t* 형 반환
# else
return mbcs; // const char* 형 반환
# endif
}
};
...[코드상에서]...
cStr strMsg;
...
MessageBox(hWnd, strMsg, NULL, MB_OK);
...
MessageBox는 유니코드 프로젝트에서는 MessageBoxW에 멀티바이트 프로젝트에서는 MessageBoxA에 연결되는데
위와 같이 현재 시스템에 맞춰서 LPCTSTR로 자동으로 변환해서 출력하도록 만들 수 있다.
'스킬북 > 코드 조각' 카테고리의 다른 글
| 자바스크립트로 만든 한글IME (2) | 2009/09/01 |
|---|---|
| 소스에서 유니코드 시스템 판단하기 (0) | 2007/11/28 |
| WinCE Standard SDK 5.0의 sipapi의 눈속임 (0) | 2007/10/19 |
| 윈CE에서 ini파일 사용하기.. (5) | 2007/08/02 |


|꼬마늑대|


댓글을 달아 주세요