MBCS와 WBCS의 동시 지원
WBCS 기반의 개발이 여러가지로 장점이 많지만 기존 개발 된 프로그램과의 호환성,
사용자 시스템의 유니코드 지원여부에 때문에 프로그램 개발에 이써 MBCS와 WBCS을 동시에 지원하는 프로그램을 개발 하여야 한다.
#include<windows.h>
Windosws 정의 자료형
typedef char CHAR;
typedef wchar_t WCHAR;
#define CONST const
typedef CHAR* LPSTR;
typedef CONST CHAR* LPCSTR;
typedef WCHAR* LPWSTR;
typedef CONST WCHAR* LPCWSTR;
windows.h 안에는 이런 식으로 자료형이 정의되있는데 실제 개발에 있어서 꼭 이런식의 자료형을 사용하지는 않으므로 이정도만 알아두자.
MBCS와 WBCS 동시 지원 매크로
#ifdef UNICODE
typedef WCHAR TCHAR;
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef CHAR TCHAR;
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif
windows.h 보면 위와같은 매크로가 선언되어 있다.
만약 매크로 UNICODE 가 정의됬을 경우
TCHAR arr[10]; → WCHAR arr[10]; → wchar_t arr[10];
매크로 UNICODE 가 정의되지 않았을 경우
TCHAR arr[10]; → CHAR arr[10] ; → char arr[10];
이런식으로 처리가 된다.
이 매크로를 통하여 손쉽게 MBCS와 WBCS를 동시에 지원하는 프로그램을 개발 할 수있다.
#ifdef _UNICODE
#define __T(x) L ## x
#else
#define __T(x) x
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
WBCS 기반의 문자열을 선언 할 때 L"ABC" 이런식으로 정의하는것을 위한 매크로가 위의 매크로 이다.
#define __T(x) L ## x 이 부분의 ## 처리자는 L과 x를 붙이라는 의미이다.
매크로 _UNICODE 가 정의됬을 경우
_T("ABC"); __T("ABC"); L"ABC";
매크로 _UNICODE 가 정의되지 않았을 경우
_T("ABC"); __T("ABC"); "ABC";
매크로가 정의 되어있을떄를 보면 문자열이 WBCS로 치환되고
매크로가 정의 되지않았을 때 MBCS 기반으로 해석된다.
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
이 부분은 _T(x), __T(x), _TEXT(x) 어떤걸 쓰던 상관은 없지만 주로 _T(x)를 쓴다.
예제 2-6]
#define UNICODE
#define _UNICODE
int wmain(void){
TCHAR str[]=_T("1234567");
int size=sizeof(str);
printf("string length : %d \n",size); 실행결과
return 0; string length : 16
}
간단한 예제를 통하여 매크로를 정의했을때 TCHAR str[]=_T("1234567");부분이 유니코드 처리가 되었다는 사실을 결과값을 통하여 알 수있다.
(문자 7개에 null값포함 각각 2byte씩 이므로 문자열의 길이가 16이다.)
※유니코드에서 null값도 2byte이다. 나만 모르던 사실 일 수 있다.
MBCS와 WBCS 동시 지원 함수
많이 쓰는 MBCS와 WBCS 동시 지원하는 함수이다.
'강좌 정리 > 뇌를자극하는윈도우즈시스템프로그래밍' 카테고리의 다른 글
04.장 컴퓨터 구조에 대한 두번째 이야기 ① 컴퓨터 구조의 접근방법 (0) | 2012.06.29 |
---|---|
03장. 64비트 기반 프로그래밍 ② 프로그램 구현 관점에서의 WIN32 vs WIN64, 오류의 확인 (0) | 2012.06.28 |
03장. 64비트 기반 프로그래밍 ① WIN32 vs WIN64 (0) | 2012.06.28 |
2장. 아스키코드 vs 유니코드 ①Windows에서의 유니코드(UNICODE) (0) | 2012.06.25 |
01장. 컴퓨터 구조에 대한 첫 번째 이야기 ②프로그램의 실행과정, 하드웨어 구성의 재접근 (0) | 2012.06.25 |