Windows 에서 Wide Character 는 UNICODE 를 의미한다.
--------------------------------
매크로
_T("ABC")
TEXT("ABC")
"ABC" 대신 위에 것들을 쓰자.
UNICODE로 컴파일하면 UNICODE문자열로, ASCII로 컴파일하면 ASCII 문자열로 인식한다.
--------------------------------
windows (ce포함)용 c/c++의 string 처리에서 알아두면 좋은 거.
문자열의 길이를 재는 함수라면?
strlen() : ASCII용 문자열 길이 쟤는 함수
wcslen() : UNICODE용 문자열 길이 쟤는 함수
_tcslen() : 환경에 맞추어지는 매크로
뭐 일단 _mcslen() 도 있긴하다. (MB환경에서 strlen을 호출하면 이쪽으로 연결할걸?)
다른 함수들도 마찬가지다.
strXXXX() 함수들이 wcsXXXX()로, tcsXXXX() 로 바꾸어 쓰면 된다.
strtol : ASCII 문자열에서 long 값으로 변환 (atoi와 비슷하지만 진수 지정 가능)
wcstol : UNICODE ~~~
_tcstol : 환경 ~~~
-------------------------------
그럼 다 지원하려면 가장 깔끔한 방법은?
tcsXXXX() 시리즈를, char 대신 매크로 TCHAR 쓰는거.
물론 덕분에 골치아픈 문제도 가끔 발생한다는거..
-------------------------------
WideCharToMultiByte() : UNICODE -> ASCII
MultiByteToWideChar() : ASCII -> UNICODE
--------------------------------
char : ASCII
wchar_t : UNICODE
TCHAR : 환경 따라가는 매크로
--------------------------------
CString은 내용이 wchar일 수 도, char일 수 도 있음에 유의할 것.
--------------------------------
eVC++ 이나 SmartDevice(WinCE)용으로 사용하는 Visual Studio 시리즈는 기본설정이 UNICODE 환경으로 되어있다.
ASCII를 쓰고 싶다면 컴파일설정 (프로젝트 속성?) 을 바꾸어 주어야한다.
--------------------------------
아... Windows Embedded CE 6.0 부터는 기존 문자열 함수들에 문제가 있을 수 있다고 해서...
safe 시리즈를 선보였다. 젠장.
예를들어 strcpy 라면 strcpy_s 이런식이었던 듯...
대충 봤을 때 문자열 종료 문자 '\0'가 문제가 있다고 파악한 모양이다.