Delen via


Algemene gegevenstypen gebruiken

Als u algemene gegevenstypen in uw code gebruikt, kan deze worden gecompileerd voor Unicode- door een preprocessorrichtlijn te gebruiken om UNICODE te definiëren vóór de #include instructies voor de headerbestanden. Als u de code wilt compileren voor Windows-codepagina's (ANSI), laat u de definitie "UNICODE" weg. Nieuwe Windows-toepassingen moeten Unicode gebruiken om inconsistenties van verschillende codepagina's te voorkomen en lokalisatie te vereenvoudigen.

Als u broncode wilt maken die kan worden gecompileerd voor het gebruik van Unicode-tekens en -tekenreeksen of voor het gebruik van tekens en tekenreeksen van Windows-codepagina's:

  1. Gebruik algemene gegevenstypen, zoals TCHAR, LPTSTR en LPTCH, voor alle teken- en tekenreekstypen die worden gebruikt voor tekst. Zie Windows-gegevenstypen voor tekenreeksenvoor meer informatie over algemene typen.

  2. Zorg ervoor dat aanwijzers naar niet-tekstgegevensbuffers of binaire bytematrices zijn gecodeerd met gegevenstypen zoals LPBYTE of LPWORD, in plaats van het type LPTSTR of LPTCH.

  3. Declareer pointers van onbepaald type expliciet als ongeldige aanwijzers met behulp van LPVOID, indien van toepassing.

  4. Maak pointer-rekenkunde typeonafhankelijk. Het gebruik van eenheden van TCHAR-grootte levert variabelen op die 2 bytes zijn als UNICODE is gedefinieerd en 1 byte als UNICODE niet is gedefinieerd. Met behulp van aanwijzerberekening wordt altijd het aantal elementen geretourneerd dat wordt aangegeven door de aanwijzer, ongeacht of de elementen 1 of 2 bytes groot zijn. Met de volgende expressie wordt altijd het aantal elementen opgehaald, ongeacht of UNICODE is gedefinieerd.

    cCount = lpEnd - lpStart;
    

    De volgende expressie bepaalt het aantal gebruikte bytes.

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

    U hoeft een uitdrukking zoals de onderstaande niet te wijzigen, omdat de aanwijzer naar het volgende tekenelement verwijst.

    chNext = *++lpText;
    
  5. Vervang letterlijke tekenreeksen en manifesttekenconstanten door macro's. Wijzig expressies zoals de volgende.

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

    Gebruik de macro TEKST als volgt in deze expressie.

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

    De TEKST- macro zorgt ervoor dat tekenreeksen worden geëvalueerd als L-tekenreeks wanneer UNICODE is gedefinieerd en als 'tekenreeks' anders. Voor eenvoudiger beheer verplaatst u letterlijke tekenreeksen naar resources, met name als ze tekens bevatten buiten het ASCII-bereik (0x00 via 0x7F) of worden weergegeven in de gebruikersinterface. Om lokalisatie van uw toepassing voor verschillende nationale talen te ondersteunen, is het erg belangrijk dat alle tekenreeksen van de gebruikersinterface zich in lokaliseerbare resources bevindt.

  6. Gebruik de algemene versies van de Windows-functies. Zie Conventies voor functieprototypesvoor meer informatie.

  7. Gebruik de algemene versies van de standaard C-bibliotheektekenreeksfuncties en vergeet niet om '_UNICODE' en 'UNICODE' te definiëren, zoals beschreven in Standaard C-functies.

  8. Als u een toepassing aanpast die oorspronkelijk is geschreven voor Windows-codepagina's, moet u alle code wijzigen die afhankelijk is van 255 als de grootste waarde voor een teken.

Wanneer u code compileert die u hierboven hebt geschreven, kan de compiler zowel Unicode- als Windows-codepaginaversies van uw toepassing maken op basis van dezelfde bron. Afhankelijk van de definities voor UNICODE worden de algemene functies omgezet om dezelfde binaire bestanden te produceren alsof u code uitsluitend hebt geschreven voor Unicode of uitsluitend voor Windows-codepagina's.

Unicode- en tekensets gebruiken