WBCS의 이점에도 불구하고 MBCS를 포기하지 못하는 이유는 다음과 같다.

- 이전에 만들어진 프로그램과의 호환성

- WBCS(유니코드)를 지원하지 못하는 사용자의 시스템


그래서 MBCS와 WBCS를 동시 지원하도록 개발을 해야한다.

(두가지로 나누어서 개발시 유지보수, 배포에 불편한점이 많다.)


windows 헤더 파일


#include <windows.h>


typedef    char            CHAR;

typedef    wchar_t        WCHAR;


#define    CONST        const


typedef    CHAR*                LPSTR;

typedef    CONST CHAR*      LPCSTR;


typedef    WCHAR *                LPWSTR;

typedef    CONST WCHAR *      LPCWSTR;



MBCS와 WBCS 동시 지원 매크로


#ifdef UNICODE

typedef    WCHAR        TCHAR;

typedef    LPWSTR        LPTSTR;

typedef    LPCWSTR      LPCTSTR;

#else

typedef    CHAR           TCHAR;

typedef    LPSTR           LPTSTR;

typedef    LPCSTR         LPCTSTR;

#endif


#ifdef _UNICODE

#define    __T(x)    L##x        //__T("ABC") => L"ABC" 이렇게 변경된다. (x에 L을 붙여라)

#else

#define    __T(x)    x

#endif


#define    _T(x)         __T(x)

#define    _TEXT(x)    __T(x)


MBCS와 WBCS 동시 지원 함수


#ifdef _UNICODE

#define            _tmain    wmain

#define            _tcslen    wcslen

#define            _tprintf    wprintf

#define            _tscanf    wscanf

#else

#define            _tmain    main

#define            _tcslen    strlen

#define            _tprintf    printf

#define            _tscanf    scanf

#endif


동시 지원 프로그래밍 예시


LPTSTR str1 = _T("MBCS or WBCS1");

TCHAR str2[] = _T("MBCS or WBCS2");

TCHAR str3[100];

TCHAR str4[50];


LPCTSTR pStr = str1;


_tprintf(_T("string size " %d \n"), sizeof(str2));

_tprintf(_T("string length : %d \n"), _tcslen(pStr));


_fputts(_T(intput String 1 : "), stdout);

_tscanf(_T("%s"), str3);

+ Recent posts