Win32 API
ANSI 및 와이드 문자 함수
수색…
소개
하나 이상의 문자열 을 인수로 취하는 함수의 Windows API 설명서는 일반적으로 다음과 같습니다.
BOOL WINAPI CopyFile(
_In_ LPCTSTR lpExistingFileName,
_In_ LPCTSTR lpNewFileName,
_In_ BOOL bFailIfExists
);
두 개의 문자열 매개 변수에 대한 데이터 유형은 여러 부분으로 구성됩니다.
- LP = 긴 포인터
- C = const
- T = TCHAR
- STR = 문자열
TCHAR
은 무엇을 의미합니까? 이것은 프로그램 컴파일을 위해 선택한 플랫폼에 따라 다릅니다.
CopyFile
자체는 다음과 같이 정의 된 매크로 일뿐입니다.
#ifdef UNICODE
#define CopyFile CopyFileW
#else
#define CopyFile CopyFileA
#endif
따라서 실제로 두 개의 CopyFile
함수가 있고 컴파일러 플래그에 따라 CopyFile
매크로가 하나 또는 다른 것으로 해결됩니다.
코어 토큰 인 TCHAR
는 다음과 같이 정의됩니다.
#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
다시 컴파일 플래그에 따라 TCHAR은 "narrow"또는 "wide"(2 바이트) 문자입니다.
UNICODE가 정의 될 때, CopyFile
로 정의 CopyFileW
UTF-16 인코딩 할 것으로 예상되는 파라미터들이, 2- 바이트 문자 배열을 사용한다.
UNICODE가 정의되지 않은 경우, CopyFile
로 정의된다 CopyFileA
현재 사용자의 기본 ANSI 인코딩으로 인코딩 될 것으로 예상되는 단일 바이트 문자 어레이를 사용한다.
두 가지 유사한 매크로가 있습니다. UNICODE
는 Windows API에 넓은 문자열이 필요하고 _UNICODE
( _UNICODE
밑줄이 있음)를 사용하여 C 런타임 라이브러리에서 유사한 기능을 사용할 수있게합니다.
이러한 정의에 따라 ANSI 및 유니 코드 모드로 컴파일되는 코드를 작성할 수 있습니다.
utf-8은 불행하게도 잘 지원되지 않지만 ANSI 인코딩은 싱글 바이트 인코딩 (즉, 라틴 -1)과 멀티 바이트 인코딩 (즉, 시프트 jis) 일 수 있다는 것을 아는 것이 중요합니다.
즉, ANSI 또는 이러한 함수의 와이드 문자 변형은 고정 너비 인코딩으로 작동하지 않을 수 있습니다.