Udostępnij przez


Korzystanie z ogólnych typów danych

Jeśli używasz ogólnych typów danych w kodzie, można go skompilować dla Unicode po prostu za pomocą dyrektywy preprocesora w celu zdefiniowania "UNICODE" przed instrukcjami #include dla plików nagłówkowych. Aby skompilować kod dla stron kodowych systemu Windows (ANSI), należy pominąć definicję "UNICODE". Nowe aplikacje systemu Windows powinny używać formatu Unicode, aby uniknąć niespójności różnych stron kodu i uprościć lokalizację.

Aby utworzyć kod źródłowy, który można skompilować tak, aby można było używać zarówno znaków i ciągów Unicode, jak i znaków oraz ciągów ze stron kodu systemu Windows:

  1. Użyj ogólnych typów danych, takich jak TCHAR, LPTSTR i LPTCH, dla wszystkich typów znaków i ciągów używanych dla tekstu. Aby uzyskać więcej informacji na temat typów ogólnych, zobacz Typy danych systemu Windows dla ciągów.

  2. Upewnij się, że wskaźniki do buforów danych nietekstowych lub tablic bajtów binarnych są kodowane za pomocą typów danych, takich jak LPBYTE lub LPWORD, zamiast typu LPTSTR lub LPTCH.

  3. Zadeklaruj wskaźniki typu nieokreślonego jawnie jako wskaźniki typu void, używając identyfikatora LPVOID, gdzie jest to właściwe.

  4. Ustaw wartość arytmetyczną wskaźnika na niezależną od typu. Użycie jednostek rozmiaru TCHAR daje zmienne, które są 2 bajty, jeśli kod UNICODE jest zdefiniowany, i 1 bajt, jeśli unicode nie jest zdefiniowany. Użycie arytmetyki wskaźnika zawsze zwraca liczbę elementów wskazywanych przez wskaźnik, niezależnie od tego, czy elementy mają rozmiar 1 lub 2 bajty. Następujące wyrażenie zawsze pobiera liczbę elementów, niezależnie od tego, czy kod UNICODE jest zdefiniowany.

    cCount = lpEnd - lpStart;
    

    Poniższe wyrażenie określa liczbę użytych bajtów.

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

    Nie ma potrzeby zmiany wyrażenia podobnego do poniższego, ponieważ inkrementacja wskaźnika wskazuje na kolejny element znakowy.

    chNext = *++lpText;
    
  5. Zastąp ciągi znakowe i stałe znakowe makrami. Zmień wyrażenia, takie jak poniższe.

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

    Użyj makra TEXT w następujący sposób w tym wyrażeniu.

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

    Makro TEXT powoduje, że ciągi są oceniane jako ciąg L", gdy kod UNICODE jest zdefiniowany, a jako "ciąg" w przeciwnym razie. Aby ułatwić zarządzanie, przenieś napisy dosłowne do zasobów, zwłaszcza jeśli zawierają znaki poza zakresem ASCII (0x00 do 0x7F) lub są widoczne dla użytkownika w interfejsie. Aby obsługiwać lokalizację aplikacji dla różnych języków krajowych, bardzo ważne jest, aby wszystkie ciągi interfejsu użytkownika znajdowały się w zasobach lokalizowalnych.

  6. Użyj ogólnych wersji funkcji systemu Windows. Aby uzyskać więcej informacji, zobacz Konwencje dotyczące prototypów funkcji.

  7. Użyj uniwersalnych wersji standardowych funkcji ciągów biblioteki języka C i pamiętaj, aby zdefiniować "_UNICODE" oraz "UNICODE", zgodnie z opisem w Standard C Functions.

  8. Jeśli dostosowujesz aplikację pierwotnie napisaną dla stron kodu systemu Windows, pamiętaj, aby zmienić dowolny kod, który opiera się na 255 jako największą wartość znaku.

Podczas kompilowania kodu napisanego zgodnie z powyższym opisem kompilator może utworzyć wersje stron kodowych Unicode i Windows aplikacji z tego samego źródła. W zależności od definicji unicode funkcje ogólne są rozpoznawane w celu utworzenia tych samych plików binarnych, co w przypadku opracowywania kodu wyłącznie dla formatu Unicode lub wyłącznie dla stron kodu systemu Windows.

Używanie Unicode i zestawów znaków