Delen via


Conventies voor functieprototypes

De Windows SDK biedt functieprototypes in algemene, Windows-codepaginaen Unicode- versies. De prototypen kunnen worden gecompileerd om prototypen van windows-codepagina's of Unicode-prototypes te produceren. Alle drie de prototypes worden in dit onderwerp besproken en worden geïllustreerd door codevoorbeelden voor de functie SetWindowText.

Hier volgt een voorbeeld van een algemeen prototype.

BOOL SetWindowText(
  HWND hwnd,
  LPCTSTR lpText
);

Het headerbestand bevat de algemene functienaam die is geïmplementeerd als macro.

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

De preprocessor breidt de macro uit naar de windows-codepagina of de naam van de Unicode-functie. De letter "A" (ANSI) of "W" (Unicode) wordt toegevoegd aan het einde van de algemene functienaam, indien van toepassing. Het headerbestand biedt vervolgens twee specifieke prototypen, één voor Windows-codepagina's en één voor Unicode, zoals wordt weergegeven in de volgende voorbeelden.

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

Zoals uitgelegd in Windows-gegevenstypen voor tekenreeksen, gebruikt het algemene functieprototype LPCTSTR voor de tekstparameter. Het prototype van de Windows-codepagina maakt echter gebruik van het type LPCSTR en het Unicode-prototype maakt gebruik van LPCWSTR.

Voor alle functies met tekstargumenten moeten toepassingen normaal gesproken de algemene functieprototypes gebruiken. Als een toepassing unicode definieert vóór de #include instructies voor de headerbestanden of tijdens de compilatie, worden de instructies gecompileerd in Unicode-functies.

Notitie

Nieuwe Windows-toepassingen moeten Unicode gebruiken om inconsistenties van verschillende codepagina's te voorkomen en om de lokalisatie te vereenvoudigen. Ze moeten worden geschreven met algemene functies en moeten UNICODE definiëren om de functies te compileren in Unicode-functies. Op de weinige plaatsen waar een toepassing moet werken met 8-bits tekengegevens, kan deze expliciet gebruikmaken van de functies voor Windows-codepagina's.

 

Uw toepassing moet altijd een algemeen functieprototype gebruiken met de algemene tekenreeks- en tekentypen. Alle functienamen die eindigen met een hoofdletter 'W' nemen Unicode, dat wil gezegd, breed teken, parameters. Sommige functies bestaan alleen in Unicode-versies en kunnen alleen worden gebruikt met de juiste gegevenstypen. LCIDToLocaleName en LocaleNameToLCID- hebben bijvoorbeeld alleen Unicode-versies.

De sectie Vereisten in de referentiedocumentatie voor elke Unicode- en tekensetfunctie bevat informatie over de functieversies die worden geïmplementeerd door ondersteunde besturingssystemen. Als er een regel is opgenomen die begint met Unicode, heeft de functie afzonderlijke versies van Unicode- en Windows-codepagina's.

Notitie

Wanneer een functie een lengteparameter voor een tekenreeks heeft, moet de lengte worden gedocumenteerd als een telling van TCHAR-waarden in de tekenreeks. Dit gegevenstype verwijst naar bytes voor windows-codepaginaversies van de functie of 16-bits woorden voor Unicode-versies. Functies die aanwijzers vereisen of retourneren naar niet-getypte geheugenblokken, zoals de functie GlobalAlloc, hebben doorgaans een grootte in bytes, ongeacht het prototype dat wordt gebruikt. Als de toewijzing van niet-getypt geheugen voor een tekenreeks is, moet de toepassing het aantal tekens vermenigvuldigen met de grootte van (TCHAR). Zie Algemene gegevenstypen gebruikenvoor meer informatie.

 

Unicode in de Windows-API