원문 http://wisdom.sakura.ne.jp/system/winapi/win32/win4.html
문자의 데이터 형태
빨리 윈도우를 표시시키고, 멀티 미디어같은 조작을 하고싶은지도 모르겠습니다만
아쉽지만 이건 조금 더 전의 이야기가 되겠습니다.
왜냐하면은, 그 끔직한 소스 파일을 보이게 된다면
기억하기도 전에 하기 싫어질 수 밖에 없으니까요. (좌절(
거기서 일단 Windows 프로그래밍을 이해하는데 중요한
또 한편으로는 장래성(将来性) 있는 소스 기술(記述)을 위해 Windows의 문자 코드와 데이터 형태의 설명을 합니다.
장래성을 생각하여, 이제부터 문자 코드는 Unicode를 쓸 것이에요.
Windows NT는 이미 Unicode를 지원하고 있습니다.
하지만, Windows 9x 시리즈는 Unicode에 미대응(未対応)이라 어려운 부분입니다.
그렇다고 해서, 프로그래머가 플랫폼마다 코드를 나눠 쓸 필요는 없습니다.
Windows SDK는 이 차이을 정교하게 줄이고 있습니다.
다만, 이것을 이용하기 위해서는 그것 나름대로의 데이터 형(型)의 지식이 필요합니다.
여기만 넘기면, 장래(将来) Unicode판(版)에 코드를 고쳐 쓰는 일이 적어집니다.
Windows에서는, 다음의 기본 데이터 형을 다음과 같이 정의하고 있습니다.
이하(以下)의 데이터 형의 정의는, WINNT.H 헤더파일에 정의되어 있습니다.
typedef char CHAR;
typedef short SHOTR;
typedef long LONG;
typedef wchar_t WCHAR;
WinMain() 함수의 세번째 인수의 형 LPSTR은 다음의 정의로 되어있습니다.
typedef CHAR* LPSTR;
LRSTR의 L은 Long을 나타내는 것으로, 16비트 시대의 산물이라는 점에서
PSTR(P는 포인터)이라는 것으로 존재합니다. (형태는 LPSTR과 똑같음)
#include<windows.h>
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,
int nCmdShow ) {
return 0;
}
이것들 두개의 데이터형은 다음과 같이 정의되어 있습니다.
#ifdef UNICODE
typedef WCHAR TCHAR , *PTCHAR ;
#else
typedef char TCHAR , *PTCHAR ;
#endif
도중에 다른 데이터 형도 많이 정의되고 있습니다만 생략하겠습니다.
UNICODE 식별자의 정의에 대해서, 비트 수를 변화시키고 싶은 문자열에 이를 사용합니다.
TEXT 매크로
여기서 간단히 TEXT 매크로에 대해서도 언급해하겠습니다.
TEXT 매크로는 UNICODE가 정의되어 있는가 어떤가로 문자열에 L을 부가(付加)합니다.
#define __T(x) L ## x
이것이 최종적으로 매크로가 됩니다만, TEXT(x)는 여기에 x를 넘겨줍니다.
UNICODE가 정의되지 않으면, 아무것도 하지 않습니다.
이 강좌의 샘플 프로그램도, 되는대로 쌍방에 대응되도록 하기 위해
TEXT() 매크로나 TCHAR 형을 사용해서, 범용적(汎用的)인 코드 프로그램을 유의합시다.
실제 사용예는 다음 장에서 소개하겠습니다.