태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
Visual Studio .NET부터 유니코드 시스템이 기본 인코딩으로 되어 있다.
즉 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로 자동으로 변환해서 출력하도록 만들 수 있다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by |꼬마늑대|

댓글을 달아 주세요

 체크하면 블로그 관리자에게만 내용을 공개합니다.