Share via


제네릭 데이터 형식 사용

코드에서 제네릭 데이터 형식을 사용하는 경우 전처리기 지시문을 사용하여 헤더 파일에 대한 #include 문 앞에 "UNICODE"를 정의하기만 하면 유니코드용으로 컴파일할 수 있습니다. WINDOWS(ANSI) 코드 페이지에 대한 코드를 컴파일하려면 "UNICODE" 정의를 생략합니다. 새 Windows 애플리케이션은 유니코드를 사용하여 다양한 코드 페이지의 불일치를 방지하고 지역화를 간소화해야 합니다.

유니코드 문자와 문자열을 사용하거나 Windows 코드 페이지의 문자와 문자열을 사용하기 위해 컴파일할 수 있는 소스 코드를 만들려면 다음을 수행합니다.

  1. 텍스트에 사용되는 모든 문자 및 문자열 형식에 TCHAR, LPTSTR 및 LPTCH와 같은 제네릭 데이터 형식을 사용합니다. 제네릭 형식에 대한 자세한 내용은 문자열용 Windows 데이터 형식을 참조하세요.

  2. 텍스트가 아닌 데이터 버퍼 또는 이진 바이트 배열에 대한 포인터는 LPTSTR 또는 LPTCH 형식 대신 LPBYTE 또는 LPWORD와 같은 데이터 형식으로 코딩되어야 합니다.

  3. LPVOID를 적절하게 사용하여 확정되지 않은 형식의 포인터를 void 포인터로 명시적으로 선언합니다.

  4. 포인터 산술 형식을 독립적으로 만듭니다. TCHAR 크기의 단위를 사용하면 유니코드가 정의된 경우 2바이트, 유니코드가 정의되지 않은 경우 1바이트인 변수가 생성됩니다. 포인터 산술 연산을 사용하면 요소의 크기가 1바이트인지 2바이트인지 여부에 관계없이 항상 포인터가 나타내는 요소 수를 반환합니다. 다음 식은 유니코드 정의 여부에 관계없이 항상 요소 수를 검색합니다.

    cCount = lpEnd - lpStart;
    

    다음 식은 사용되는 바이트 수를 결정합니다.

    cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
    

    포인터 증가가 다음 문자 요소를 가리키기 때문에 다음과 같은 문을 변경할 필요가 없습니다.

    chNext = *++lpText;
    
  5. 리터럴 문자열 및 매니페스트 문자 상수를 매크로로 대체합니다. 다음과 같은 식을 변경합니다.

    while(*lpFileName++ != '\\')
    {
        // ...
    }
    

    이 식에서 다음과 같이 TEXT 매크로를 사용합니다.

    while(*lpFileName++ != TEXT('\\'))
    {
        // ...
    }
    

    TEXT 매크로를 사용하면 유니코드가 정의될 때 문자열이 L"string"으로 평가되고 그렇지 않으면 "string"으로 평가됩니다. 보다 쉽게 관리하려면 리터럴 문자열을 리소스로 이동하세요. 특히 ASCII 범위 외부의 문자(0x7F 통해 0x00)를 포함하거나 사용자 인터페이스에 노출되는 경우 리터럴 문자열을 리소스로 이동합니다. 다양한 국가 언어에 대한 애플리케이션의 지역화를 지원하려면 모든 사용자 인터페이스 문자열이 지역화 가능한 리소스에 있어야 합니다.

  6. Windows 함수의 제네릭 버전을 사용합니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

  7. 표준 C 라이브러리 문자열 함수의 제네릭 버전을 사용하고 표준 C 함수에 설명된 대로 "_UNICODE"과 "UNICODE"를 정의 해야 합니다.

  8. 원래 Windows 코드 페이지용으로 작성된 애플리케이션을 조정하는 경우 255를 사용하는 모든 코드를 문자의 가장 큰 값으로 변경해야 합니다.

위에서 설명한 대로 작성한 코드를 컴파일하는 경우 컴파일러는 동일한 원본에서 애플리케이션의 유니코드 및 Windows 코드 페이지 버전을 모두 만들 수 있습니다. UNICODE에 대한 정의에 따라 제네릭 함수는 유니코드 전용 또는 Windows 코드 페이지에만 코드를 작성한 것처럼 동일한 이진 파일을 생성하도록 확인됩니다.

유니코드 및 문자 집합 사용