유니코드 프로그래밍 요약
유니코드에 대한 MFC 및 C 런타임 지원을 활용하려면 다음을 수행해야 합니다.
를 정의합니다
_UNICODE
.프로그램을 빌드하기 전에 기호
_UNICODE
를 정의합니다.진입점을 지정합니다.
프로젝트의 속성 페이지 대화 상자에서 링커 폴더의 고급 페이지에서 진입점 기호를
wWinMainCRTStartup
로 설정합니다.이식 가능한 런타임 함수 및 형식을 사용합니다.
유니코드 문자열 처리에 적절한 C 런타임 함수를 사용합니다. 함수 패밀리를
wcs
사용할 수 있지만 완전히 이식 가능한(국제적으로 사용)_TCHAR
매크로를 사용하는 것이 좋습니다. 이러한 매크로는 모두 접두사로_tcs
갖습니다. 함수 패밀리를 대신str
합니다. 이러한 함수는 런타임 라이브러리 참조의 국제화 섹션에 자세히 설명되어 있습니다. 자세한 내용은 tchar.h의 일반 텍스트 매핑을 참조하세요.유니코드 지원에 설명된 관련 이식 가능한 데이터 형식 및 사용
_TCHAR
리터럴 문자열을 올바르게 처리합니다.
Visual C++ 컴파일러는 다음과 같이 코딩된 리터럴 문자열을 해석합니다.
L"this is a literal string"
유니코드 문자 문자열을 의미합니다. 리터럴 문자에 대해 동일한 접두사를 사용할 수 있습니다. 매크로를
_T
사용하여 리터럴 문자열을 일반적으로 코딩하므로 유니코드 아래에 유니코드 문자열로 컴파일하거나 유니코드 없이 ANSI 문자열(MBCS 포함)로 컴파일합니다. 예를 들어 다음 식을 사용하는 대신pWnd->SetWindowText( "Hello" );
다음을 사용합니다.
pWnd->SetWindowText( _T("Hello") );
_UNICODE
정의된_T
경우 리터럴 문자열을 L 접두사 형식으로 변환하고,_T
그렇지 않으면 L 접두사 없이 문자열을 변환합니다.팁
_T
매크로는 매크로와_TEXT
동일합니다.함수에 문자열 길이를 전달하는 데 주의해야 합니다.
일부 함수는 문자열의 문자 수를 원합니다. 다른 사용자는 바이트 수를 원합니다. 예를 들어 정의된 경우
_UNICODE
개체에 대한CArchive
다음 호출이 작동하지 않습니다(str
a).CString
archive.Write( str, str.GetLength( ) ); // invalid
유니코드 애플리케이션에서 길이는 문자 수를 제공하지만 각 문자는 너비가 2바이트이므로 올바른 바이트 수는 아닙니다. 대신 다음을 사용해야 합니다.
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // valid
은 쓸 올바른 바이트 수를 지정합니다.
그러나 바이트 지향이 아닌 문자 지향 MFC 멤버 함수는 다음과 같은 추가 코딩 없이 작동합니다.
pDC->TextOut( str, str.GetLength( ) );
CDC::TextOut
는 바이트가 아닌 여러 문자를 사용합니다.fopen_s _wfopen_s 사용하여 유니코드 파일을 엽니다.
요약하자면, MFC와 런타임 라이브러리는 유니코드 프로그래밍에 대해 다음과 같은 지원을 제공합니다.
데이터베이스 클래스 멤버 함수를 제외하고 모든 MFC 함수는 유니코드 사용(포함
CString
)입니다.CString
에서는 유니코드/ANSI 변환 함수도 제공합니다.런타임 라이브러리는 모든 문자열 처리 함수의 유니코드 버전을 제공합니다. (런타임 라이브러리는 유니코드 또는 MBCS에 적합한 이식 가능한 버전도 제공합니다. 매크로입니다
_tcs
.)tchar.h는 리터럴 문자열과
_T
문자를 번역하기 위한 이식 가능한 데이터 형식과 매크로를 제공합니다. 자세한 내용은 tchar.h의 일반 텍스트 매핑을 참조하세요.런타임 라이브러리는 와이드 문자 버전의
main
. 애플리케이션을 유니코드 인식으로 만드는 데 사용합니다wmain
.