2 TCHAR의 형태를 활용한다.
3 함수를 변경한다.
4 Unicdoe define 설정방법
5 MFC Application Unicode compile경우 link " _WinMain@16"의 Error가 발생한다.
6 함수의 인자가 char*인경우
7 TCHAR의 형태를 지원하지 않는 함수 목록
8 Unicode text file
9 9X 지원의 여부
1 Unicode 로 작성된 program의 동작 되지 않는 OS
- Windows 95
- Windows 98주1)
2 TCHAR의 형태를 활용한다.
UNICODE와 MBCS에서 같은 Source를유지하기 위하여 tchar.h의 TCHAR를 활용한다.
변경 전 | 변경 후 |
char | TCHAR |
unsigned char | TBYTE |
char str[] = "test string" | TCHAR str[] = TEXT("test string") |
3 함수를 변경한다.
변경 전 | 변경 후 |
strlen() | _tcslen() * sizeof(TCHAR) |
strcat() | _tcscat() |
strcpy() | _tcscpy() |
str...() | _tcs...() |
4 Unicdoe define 설정방법
_MBCS대신에 _UNICODE를 정의 한다. 일부 crt 프로그램의 경우 UNICODE define을 추가로 필요로 한다. MFC에서는 _UNICODE나 UNICODE중 하나만 define되어 있으면 된다.
5 MFC Application Unicode compile경우 link " _WinMain@16"의 Error가 발생한다.
Link->Output에서 Entry-point symbol 을 미지정 상태에서 ""에서 "wWinMainCRTStartup"으로 설정한다.
6 함수의 인자가 char*인경우
GetProcAddress(HMODULE, LPCSTR) 에서 두번째의 인자는 LPCSTR이므로 _T("")를 사용하지 않는다.
::GetProcAddress(hModuel, _T("function name")); // no
::GetProcAddress(hModuel, "function name"); // ok
7 TCHAR의 형태를 지원하지 않는 함수 목록
atof (atoi, atol은 지원)
8 Unicode text file
unicode로 text파일을 만들때 편집기에 따라서 파일의 처음 부분에 2byte가 BOM 값을 가지는 경우가 있다. 따라서 text파일을 처리할 때 BOM 처리에도 주의해야 한다.
특별한 처리 없이 BOM이 있는 파일을 ftscanf 계열의 함수를 사용해서 처리하면 Unicode compile에서는
- MBCS text 파일을 읽을경우 -> Unicode로 변경하여 read (O)
- Unicode text 파일을 읽을경우 -> Unicode로 read (O)
MBCS compile에서는
- MBCS text 파일을 읽을경우 -> MBCS로 read (O)
- Unicode text 파일을 읽을경우 -> 잘못된 읽기(처음 한자만 읽고 다음 글자를 null로 인식하여, 한자만 읽힌다.)
결국 BOM이 포함된 text 파일을 다룰 경우 Unicode compile을 하는 것이 좋다.
9 9X 지원의 여부
9x에서는 Unicode 지원에 문제가 있다. 대부분의 Unicode 함수는 compile과 실행이 되나 return값이 FALSE가 나온다. 공통의 code에서는 LoadStringW(), CreateRegistryW()등이다. (windows api 계열)
wstrcpy()는 정상 동작한다. (c run-time 계열)
- 1) 작동을 위하여서는 Windows program install이 필요함.