메뉴 건너뛰기

프로그래밍


TCHAR, UNICODE, 그리고 윈도우 NT

파이팅건맨 2002.02.26 14:00 조회 수 : 492

만약 여러분이 TCHAR와 유니코드에 대해서 잘 모른다면 여러분은 _T()매크로에 익숙치 않을 것이다. 다음은 그것에 관한 간단한 설명이다.
유니코드는 멀티바이트 문자셋으로서 전 세계 알파벳 문자의 많은 부분을 하나의 16비트 공간 안에 표현할 수 있다. 윈도우NT 안에 있는 모든 API 호출은 유니코드 안에서 구현된다. 그러므로 윈도우 NT 응용 프로그램을 작성할 때는 유니코드를 사용해야 한다. 그렇게 해야 하는 이유로서 NT는 문자열 파라미터를 취하는 각각의 API 함수에 두 가지 형식을 가지고 있다. 하나는 w로 끝나는 이름을 가지는 것으로서 와이드 문자셋(Wide Character Set)을 나타낸다. 또 하나는 ANSI 문자열을 위한 것으로서 A로 끝난다. 네이티브 호출(Native Call)은 'w'함수인 반면, 'A' 함수는 단지 'w' 함수를 호출하는 역할을 한다. 그러므로 ASCII를 사용하면 한 번 더 함수를 호출하는 작업이 필요하므로 결국은 추가로 문자열 변환 작업을 해야 하는 부담이 생긴다.(또한 메모리도 많이 소비된다.) 여러분의 응용 프로그램에서 유니코드를 사용하려면 여러분의 미리 컴파일된 헤더 또는 소스 파일 안에 #include<TCHAR.h>를 포함시킨다. 그런 다음, #define _UNICODE를 첨가한다. 만약 여러분이 이제부터 문자열 또는 문자열 함수를 사용할 때 char 대신에 TCHAR를 사용한다면 전처리기(Preprocessor)는 여러분의 응용 프로그램 안에 있는 모든 TCHAR를 wchar_t 데이터 형식으로 변환한다. 이 데이터 형식은 여러분이 필요로 하는 와이드 문자 형식이다. 만약 여러분이 _UNICODE를 정의하지 않는다면 전처리기는 단순히 TCHAR를 char형식으로 변환시킨다. 윈도우 95는 유니코드를 지원하지 않는다. 그러나 여러분이 TCHAR를 사용하여 여러분의 응용 프로그램을 작성할 수 있다면 단지 _UNICODE를 정의하지 않음으로써 여러분의 응용 프로그램은 윈도우 95에서도 실행될 것이다.

여러분이 유니코드 안에서 문자열을 사용하고자 한다면 _T() 매크로를 사용하면 된다. 이 매크로는 문자열 앞에 L을 붙임으로써 문자열 변환 작업을 천리한다. 만약 _UNICODE를 정의하지 않았다면 이 매크로는 효과를 발휘하지 않는다.

여러분이 유니코드를 사용할 때 여러분은 문자열 함수와 문자열 조작을 서로 다른 관점에서 보아야 한다. 예를 들어, strncmp()와 같은 일반적인 문자열 함수를 사용하기보다는, 대신에 _tcsncmp()를 사용해야 한다. _tcsncmp()는 strncmp()와 동일한 기능의 함수로서 TCHAR 형식의 데이터를 처리하는 함수이다. Win32 SDK 도큐먼트에는 이전 함수와 새로운 함수들 사이의 관계를 정리한 리스트가 있다. 비록 _UNICODE 전처리기가 여러분을 도와서 그러한 함수들이 올바르게 새로운 함수들과 적절히 연결될 수 있도록 하지만, 여러분은 sizeof(szBuffer)와 같은 표현을 사용할 때 세심한 관리가 요구된다. 이경우에는 (sizeof(szBuffer)/sizeof(TCHAR))로 사용해야 한다.


- PROFESSIONAL NT Services / Kevin Miller / 정보문화사 -


이 게시물이  
AiRPAGE가  
번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [52] 파이팅건맨 2016.02.20 236140
공지 [펌] ARM GCC Inline Assembler Cookbook 파이팅건맨 2006.08.18 43355
공지 [TIP] R에서 페이스북 페이지 정보 크롤링 하기 [6] 파이팅건맨 2017.02.11 25842
66 HTTP프로토콜을 이용한 파일 업로드 파이팅건맨 2002.12.24 3043
65 [Tip] CTRL-ALT-DEL키 막는법(NT,2000,XP,98) 파이팅건맨 2002.07.11 539
64 [Tip]Default 스크린세이버 가동 방법 파이팅건맨 2002.07.11 343
» TCHAR, UNICODE, 그리고 윈도우 NT 파이팅건맨 2002.02.26 492
62 [C]밀리초를 구현하는 방법 파이팅건맨 2001.08.07 981
61 [TIP]Convex Hull 알고리즘 파이팅건맨 2000.10.10 442
60 Lex와 Yacc의 사용법 강좌 파이팅건맨 2000.10.09 672
59 [C,ASM]어셈으로 윈도우메세지박스 띄우기 파이팅건맨 2000.08.16 442
58 [C소스]간단한 Hash 구현 파이팅건맨 2000.04.20 705
57 [C소스]사칙연산 파싱(Parsing) 파이팅건맨 2000.04.18 1081
56 [C소스]화일처리관련소스 파이팅건맨 2000.04.06 243
55 [구현]병렬처리기법의 개념 파이팅건맨 2000.03.11 913
54 [ASM&C]Inline ASM- PC Speaker연주. 파이팅건맨 1999.12.13 313
53 [VC소스]Font정보를 이용한 텍스트핑퐁 파이팅건맨 1999.12.12 292
52 [ASM]PC-Speaker연주 파이팅건맨 1999.11.28 262
51 [ASM]4칙연산 계산기 소스 파이팅건맨 1999.11.22 1167
50 [VC소스]이미지 파일 저장 루틴(기초) 파이팅건맨 1999.11.18 415
49 [VC소스]VIEW에 낙서하기 파이팅건맨 1999.11.12 692
48 [C++소스]가중치구하기? 파이팅건맨 1999.10.28 1503
47 [VC소스]윈도우 모양을 마음데로... 파이팅건맨 1999.10.26 502
위로