유니코드는 16비트의 단일한 값으로 모든 문자를 표현할 수 있는 문자 코드 체계이다.
유니코드를 지원하려면 문자형이나 문자열에 대해 C언어의 타입을 바로 쓰지 말고.
유니코드 설정에 따라 변경되는 중간 타입을 사용해야 한다.
C언어에 익숙한 사람들은 앞으로 문자나 문자열을 표현할 때 다음 타입들을 사용하도록 해야한다.
| C 타입 | 유니코드 타입 |
| char | TCHAR |
| char* | LPSTR |
| const char* | LPCTSTR |
char를 바로 쓴 소스는 유니코드로 바꿀 때 일일이 소스를 뜯어 고친 후 다시 컴파일해야 하지만
TCHAR라는 중간 타입을 사용한 소스는 프로젝트 설정에 따라 소스도 같이 바뀌는 효과가 있으므로
소스는 그대로 두고 컴파일만 다시 하면 된다. 문자열이 필요할 때도 char*를 쓰지 말고
가급적이면 LPSTR 또는 TCHAR*를 쓰는 것이 좋다.
문자열을 다루는 함수들도 C의 표준 함수를 쓰지 말고 가급적이면 다음과 같이 유니코드를 인식하는 함수를 사용한다.
| C 표준 함수 | 유니코드 지원 함수 |
| strlen | lstrlen |
| strcpy | lstrcpy |
| strcat | lstrcat |
| strcmp | lstrcmp |
| sprintf | wsprintf |
strlen은 char 타입의 문자열 길이만 조사하지만
lstrlen은 TCHAR 타입의 문자열에 대해서도 동작하므로 이식에 훨씬 더 유리하다.
문자열 상수도 타입이 있으므로 겹 따옴표안에 바로 문자열 상수를 쓰지 말고 TEXT 매크로를 둘러싸는 것이 좋다.
TCHAR* str = "szbuff"; // 일반 형식
TCHAR* str = TEXT("szbuff"); // TEXT 매크로
TEXT 매크로는 유니코드 설정에 따라 문자열 상수의 타입을 변경한다.
유니코드로 컴파일할 때는 각 문자가 16비트의 유니코드 문자가 되며,
그렇지 않을 때는 8비트의 안시(ANSI) 문자가 된다.
원칙적으로으로 문자열 상수에 이 매크로를 쓰는 것이 좋다.
'Programming > Windows APi' 카테고리의 다른 글
| Windows API_WinMain (0) | 2020.10.25 |
|---|---|
| Windows API_핸들(handle)에 대한 이해 (0) | 2020.10.25 |
| Windows API_윈도우즈 프로그래밍에서 주로 사용되는 접두어 (0) | 2020.10.25 |
| Windows API_화면에 선 그리기 (0) | 2020.10.09 |
| Windows API_개론 (0) | 2020.10.09 |