함수 프로토타입 표기 규칙

Windows SDK는 제네릭, Windows 코드 페이지유니코드 버전에서 함수 프로토타입을 제공합니다. 프로토타입을 컴파일하여 Windows 코드 페이지 프로토타입 또는 유니코드 프로토타입을 생성할 수 있습니다. 세 가지 프로토타입 모두 이 항목에서 설명하고 SetWindowText 함수에 대한 코드 샘플에서 설명합니다.

다음은 일반 프로토타입의 예제입니다.

BOOL SetWindowText(
  HWND hwnd,
  LPCTSTR lpText
);

헤더 파일은 매크로로 구현된 일반 함수 이름을 제공합니다.

#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif // !UNICODE

전처리기는 매크로를 Windows 코드 페이지 또는 유니코드 함수 이름으로 확장합니다. ANSI(문자 "A") 또는 "W"(유니코드)는 제네릭 함수 이름의 끝에 적절하게 추가됩니다. 헤더 파일은 다음 예제와 같이 Windows 코드 페이지용과 유니코드용으로 두 개의 특정 프로토타입을 제공합니다.

BOOL SetWindowTextA(
  HWND hwnd,
  LPCSTR lpText
);
BOOL SetWindowTextW(
  HWND hwnd,
  LPCWSTR lpText
);

문자열용 Windows 데이터 형식에 설명된 대로 제네릭 함수 프로토타입은 텍스트 매개 변수에 대해 데이터 형식 LPCTSTR을 사용합니다. 그러나 Windows 코드 페이지 프로토타입은 LPCSTR 유형을 사용하고 유니코드 프로토타입은 LPCWSTR을 사용합니다.

텍스트 인수가 있는 모든 함수의 경우 응용 프로그램은 대개 일반 함수 프로토타입을 사용해야 합니다. 애플리케이션이 헤더 파일에 대한 #include 문 앞이나 컴파일 중에 "UNICODE"를 정의하는 경우 문은 유니코드 함수로 컴파일됩니다.

참고

새 Windows 애플리케이션은 유니코드를 사용하여 다양한 코드 페이지의 불일치를 방지하고 쉽게 지역화해야 합니다. 제네릭 함수를 사용하여 작성해야 하며 유니코드 함수로 함수를 컴파일하도록 UNICODE를 정의해야 합니다. 애플리케이션이 8비트 문자 데이터로 작업해야 하는 몇 가지 위치에서는 Windows 코드 페이지에 대한 함수를 명시적으로 사용할 수 있습니다.

 

응용 프로그램은 항상 일반 문자열 및 문자 유형으로 된 일반 함수 프로토타입을 사용해야 합니다. 대문자 "W"로 끝나는 모든 함수 이름은 와이드 문자인 유니코드 매개 변수를 사용합니다. 일부 함수는 유니코드 버전에만 존재하며 적절한 데이터 형식에서만 사용할 수 있습니다. 예를 들어 LCIDToLocaleNameLocaleNameToLCID 에는 유니코드 버전만 있습니다.

각 유니코드 및 문자 집합 함수에 대한 참조 설명서의 요구 사항 섹션은 지원되는 운영 체제에서 구현된 함수 버전에 대한 정보를 제공합니다. "유니코드"로 시작하는 줄이 포함된 경우 함수에는 별도의 유니코드 및 Windows 코드 페이지 버전이 있습니다.

참고

함수에 문자열에 대한 길이 매개 변수가 있는 경우 길이는 문자열의 TCHAR 값 수로 문서화되어야 합니다. 이 데이터 형식은 함수의 Windows 코드 페이지 버전에 대한 바이트 또는 유니코드 버전의 경우 16비트 단어를 나타냅니다. 그러나 GlobalAlloc 함수와 같이 형식화되지 않은 메모리 블록에 대한 포인터를 요구하거나 반환하는 함수는 일반적으로 사용되는 프로토타입에 관계없이 크기(바이트)를 사용합니다. 형식화되지 않은 메모리 할당이 문자열에 대한 경우 애플리케이션은 문자 수를 sizeof(TCHAR)로 곱해야 합니다. 자세한 내용은 제네릭 데이터 형식 사용을 참조하세요.

 

Windows API의 유니코드