출처: http://mygeni.tistory.com/59
일부 국제 시장에서는 문자 집합이 더 큰 일본어, 중국어 등의 언어를 사용합니다. 이러한 시장의 프로그래밍을 지원하기 위해 큰 문자 집합을 처리하는 두 가지 서로 다른 방법에 MFC 라이브러리를 사용할 수 있습니다.
유니코드 문자열에 대한 MFC 지원
전체 클래스 라이브러리는 조건에 따라 유니코드 문자 및 문자열에 사용할 수 있습니다. 특히 CString 클래스는 유니코드에 사용할 수 있습니다.
참고 MFC 라이브러리의 유니코드 버전은 사용자 지정 설치 과정에서 선택해야만 하드 디스크에 복사되며 다른 종류의 설치 과정에서는 복사되지 않습니다. MFC 유니코드 파일을 사용하지 않고 MFC 유니코드 응용 프로그램을 빌드하거나 실행하려고 하면 오류가 발생할 수 있습니다.
이 파일을 하드 디스크에 복사하려면 설치 프로그램을 다시 실행하고 기능 추가/제거를 클릭합니다. 언어 도구, Visual C++, Visual C++ 클래스 및 템플릿 라이브러리를 차례로 클릭한 다음 ATL MFC 공유 라이브러리 유니코드와 ATL MFC 정적 라이브러리 유니코드를 모두 선택합니다. 이렇게 하면 다음 파일이 하드 드라이브에 복사됩니다.
UAFXCW.LIB | UAFXCW.PDB | UAFXCWD.LIB | UAFXCWD.PDB |
MFCxxU.LIB | MFCxxU.DBG | MFCxxU.DLL | MFCxxUD.LIB |
MFCxxUD.PDB | MFCxxUD.DLL | MFCDxxUD.LIB | MFCDxxUD.PDB |
MFCDxxUD.DLL | MFCNxxUD.LIB | MFCNxxUD.PDB | MFCNxxUD.DLL |
MFCOxxUD.LIB | MFCOxxUD.PDB | MFCOxxUD.DLL |
여기에서 xx는 파일의 버전 번호를 나타냅니다. 예를 들어, '70'은 버전 7.0을 나타냅니다.
CString은 TCHAR 데이터 형식을 기반으로 합니다. 프로그램의 빌드에 _UNICODE 기호가 정의되면 TCHAR는 16비트 문자 인코딩 형식인 wchar_t 형식으로 정의되고, 그렇지 않으면 TCHAR는 8비트 문자 인코딩 형식인 char로 정의됩니다. 그러면 유니코드에서는 CString이 16비트 문자로 구성됩니다. 유니코드가 없으면 char 형식의 문자들로 구성됩니다.
응용 프로그램의 유니코드 프로그래밍을 완성하려면 다음 작업도 수행해야 합니다.
- _T 매크로를 사용하여 유니코드에 이식 가능한 리터럴 문자열을 조건부로 코딩합니다.
- 문자열을 전달할 때 함수 인수에 문자 단위 길이가 필요한지 바이트 단위 길이가 필요한지 확인합니다. 유니코드 문자열을 사용하는 경우에는 이 차이가 중요합니다.
- 이식 가능한 버전의 C 런타임 문자열 처리 함수를 사용합니다.
- 문자와 문자 포인터에 대해 다음 데이터 형식을 사용합니다.
- TCHAR - char를 사용하는 위치에
- LPTST - char*를 사용하는 위치에
- LPCTSTR - const char*를 사용하는 위치에 CString은 CString과 LPCTSTR 사이에서 변환하는 LPCTSTR 연산자를 제공합니다.
CString은 유니코드를 인식하는 생성자, 할당 연산자 및 비교 연산자도 제공합니다.
유니코드 프로그래밍에 대한 자세한 내용은 유니코드 및 MBCS 및 유니코드 항목을 참조하십시오. Run-Time Library Reference에서는 모든 문자열 처리 함수의 이식 가능한 버전을 정의합니다. 국제화 범주를참조하십시오.
MBCS 문자열에 대한 MFC 지원
멀티바이트 문자 집합, 특히 DBCS(더블바이트 문자 집합)에는 클래스 라이브러리도 사용할 수 있습니다.
이 스키마에서 한 문자의 길이는 1바이트 또는 2바이트입니다. 문자 길이가 2바이트인 경우 첫째 바이트는 사용되는 코드 페이지에 따라 특정 영역에서 선택된 특별한 "선행 바이트"입니다. 선행 바이트와 "후행 바이트"는 함께 결합하여 고유 문자 인코딩을 지정합니다.
프로그램의 빌드에 _MBCS 기호가 정의된 경우 CString의 기반이 되는 TCHAR 형식은 char에 매핑됩니다. CString에서 선행 바이트와 후행 바이트로 사용할 바이트는 사용자가 결정합니다. C 런타임 라이브러리에서는 이를 결정하는 데 유용한 기능을 제공합니다.
DBCS에서 특정 문자열에는 모든 싱글바이트 ANSI 문자나 모든 더블바이트 문자, 또는 이 둘이 함께 포함됩니다. 따라서 CString 개체를 포함하는 문자열을 구문 분석할 때는 특별히 주의해야 합니다.
참고 MFC의 유니코드 문자열 serialization에서는 실행하고 있는 응용 프로그램의 버전에 상관 없이 유니코드 문자열과 MBCS 문자열을 모두 읽을 수 있습니다. 따라서 데이터 파일은 프로그램의 유니코드 버전과 MBCS 버전 사이에서 이식 가능합니다.
CString 멤버 함수에서는 해당 함수가 호출하는 C 런타임 함수의 특별한 "일반 텍스트" 버전을 사용하거나 lstrlen 또는 lstrcpy 등의 유니코드 인식 함수를 사용합니다. 따라서, 예를 들어 CString 함수가 정상적으로 strcmp를 호출할 때는 대응하는 일반 텍스트 함수인 _tcscmp를 대신 호출합니다. _tcscmp는 _MBCS 및 _UNICODE 기호의 정의 방식에 따라 다음과 같이 매핑됩니다.
_MBCS가 정의됨 | _mbscmp |
_UNICODE가 정의됨 | wcscmp |
어떤 기호도 정의되지 않음 | strcmp |
참고 _MBCS 기호와 _UNICODE 기호는 함께 사용할 수 없습니다.
모든 런타임 문자열 처리 루틴의 일반 텍스트 함수 매핑에 대한 자세한 내용은 Run-Time Library Reference를 참조하십시오. 국제화 범주를 참조하십시오.
이와 유사하게 CString 멤버 함수는 "일반" 데이터 형식 매핑을 사용하여 구현됩니다. MFC에서는 MBCS와 유니코드를 모두 사용할 수 있도록 char에 TCHAR를 사용하고, char*에 LPTSTR을 사용하며 const char*에는 LPCTSTR을 사용합니다. 이렇게 하면 MBCS나 유니코드에 대해 올바르게 매핑됩니다.
[출처] 마이크로소프트
'IT_Programming > MFC · API' 카테고리의 다른 글
작업 표시줄에서 프로그램 안보이게 하기 (0) | 2009.05.12 |
---|---|
[펌] LPSTR, LPCSTR, LPTSTR, LPCTSTR, LPWSTR,LPCWSTR 의미 (0) | 2009.04.08 |
[MFC] 각 클래스별 설명 (0) | 2008.01.22 |
콘솔 프로그램과 ODBC 연결 / keybd_event에서 한글문제 (0) | 2007.12.25 |
릴리즈 모드에서 에러가 발생할 때 / 여러 줄을 한 줄씩 차례로 읽는 방법 (0) | 2007.12.25 |