Delen via


Unicode-toepassingen

U kunt een toepassing op twee manieren opnieuw compileren als een Unicode-toepassing:

  • Neem de Unicode -#define op in het headerbestand Sqlucode.h in de toepassing.

  • Compileer de toepassing met de Unicode-optie van de compiler. (Deze optie is anders voor verschillende compilers.)

Als u een ANSI-toepassing wilt converteren naar een Unicode-toepassing, schrijft u de toepassing om Unicode-gegevens op te slaan en door te geven. Daarnaast moeten aanroepen naar functies die SQLPOINTER-argumenten ondersteunen, worden omgezet om een byte-telling te gebruiken.

Nadat een toepassing is gecompileerd als een Unicode-toepassing, als de toepassing een ODBC-API-functie aanroept (zonder achtervoegsel), herkent Driver Manager de toepassing als een Unicode-toepassing en converteert de functieaanroep naar een Unicode-functie (met het W-achtervoegsel) als het onderliggende stuurprogramma Unicode ondersteunt. Wanneer een ANSI-toepassing een functieaanroep zonder achtervoegsel uitvoert, converteert Driver Manager deze naar ANSI als het onderliggende stuurprogramma ANSI ondersteunt. Als zowel de toepassing als het stuurprogramma dezelfde tekencodering ondersteunen, geeft de stuurprogrammamanager de aanroepen door aan het stuurprogramma door (met bepaalde uitzonderingen voor ANSI-toepassingen).

Een toepassing kan zowel Unicode-functies aanroepen (met het W-achtervoegsel) als ANSI-functies (met of zonder het A-achtervoegsel). Unicode- en ANSI-functieaanroepen kunnen worden gemengd. Als de cursorbibliotheek moet worden gebruikt, kunnen unicode- en ANSI-functieaanroepen echter niet worden gemengd. De cursorbibliotheek is Unicode of ANSI, geen mengsel.

Een toepassing kan zodanig worden geschreven dat deze kan worden gecompileerd als een Unicode-toepassing of een ANSI-toepassing. In dit geval kunnen tekengegevenstypen worden gedeclareerd als SQL_C_TCHAR. Dit is een macro die SQL_C_WCHAR invoegt als de toepassing is gecompileerd als een Unicode-toepassing of SQL_C_CHAR invoegt als deze is gecompileerd als een ANSI-toepassing. De programmeur van de toepassing moet voorzichtig zijn met functies die SQLPOINTER als argument gebruiken, omdat de grootte van het lengteargument verandert (voor tekenreeksgegevenstypen) afhankelijk van of de toepassing ANSI of Unicode is.

Een functie kan op drie manieren worden aangeroepen: als een alleen Unicode-functieaanroep (met het W-achtervoegsel), als anSI-functieaanroep (met het achtervoegsel A) of als de ODBC-functieaanroep zonder achtervoegsel. De argumenten voor de drie vormen van een functie zijn identiek. Alleen functies met SQLCHAR *-argumenten of SQLPOINTER-argumenten die verwijzen naar tekenreeksen, vereisen Unicode- en ANSI-formulieren. Voor functies met argumenten die kunnen worden gedeclareerd als een tekentype, zoals SQLBindCol of SQLGetData (die geen Unicode- en ANSI-formulieren hebben), kan het argument worden gedeclareerd als het Unicode-type, het ANSI-type of in het geval van een C-typeargument, de SQL_C_TCHAR macro. Zie Unicode-gegevens voor meer informatie.

Een toepassing kan worden geschreven als een Unicode-toepassing, zelfs als er geen Unicode-stuurprogramma's beschikbaar zijn om mee te werken. Driver Manager wijst Unicode-functies en -gegevenstypen toe aan ANSI. Er zijn enkele beperkingen voor unicode-naar-ANSI-toewijzingen die kunnen worden uitgevoerd. Het bestaan van een Unicode-stuurprogramma waarmee de Unicode-toepassing kan werken, leidt tot betere prestaties en verwijdert de beperkingen die inherent zijn aan de Unicode-toewijzingen voor ANSI.