Dela via


Konventioner för funktionsprototyper

Windows SDK innehåller funktionsprototyper i allmänna, Windows-kodsidanoch Unicode- versioner. Prototyperna kan kompileras för att skapa antingen Prototyper för Windows-kodsidor eller Unicode-prototyper. Alla tre prototyperna beskrivs i det här avsnittet och illustreras av kodexempel för funktionen SetWindowText.

Följande är ett exempel på en generisk prototyp.

BOOL SetWindowText(
  HWND hwnd,
  LPCTSTR lpText
);

Rubrikfilen innehåller det allmänna funktionsnamnet som implementerats som ett makro.

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

Förprocessorn expanderar makrot till antingen Windows-kodsidan eller Unicode-funktionsnamnet. Bokstaven "A" (ANSI) eller "W" (Unicode) läggs till i slutet av det generiska funktionsnamnet efter behov. Huvudfilen innehåller sedan två specifika prototyper, en för Windows-kodsidor och en för Unicode, enligt följande exempel.

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

Som beskrivs i Windows-datatyper för strängaranvänder den generiska funktionsprototypen datatypen LPCTSTR för textparametern. Windows-kodsidans prototyp använder dock typen LPCSTR och Unicode-prototypen använder LPCWSTR.

För alla funktioner med textargument bör program normalt använda de generiska funktionsprototyperna. Om ett program definierar "UNICODE" antingen före #include-instruktionerna för huvudfilerna eller under kompilering, kompileras uttrycken till Unicode-funktioner.

Not

Nya Windows-program bör använda Unicode för att undvika inkonsekvenser i olika kodsidor och för att underlätta lokaliseringen. De ska skrivas med generiska funktioner och definiera UNICODE för att kompilera funktionerna till Unicode-funktioner. På de få platser där ett program måste fungera med 8-bitars teckendata kan det använda funktionerna för Windows-kodsidor explicit.

 

Programmet bör alltid använda en generisk funktionsprototyp med de allmänna sträng- och teckentyperna. Alla funktionsnamn som slutar med versalen "W" tar Unicode, det vill:s breda tecken, parametrar. Vissa funktioner finns bara i Unicode-versioner och kan endast användas med lämpliga datatyper. Till exempel har LCIDToLocaleName och LocaleNameToLCID endast Unicode-versioner.

Avsnittet Krav i referensdokumentationen för varje Unicode- och teckenuppsättningsfunktion innehåller information om de funktionsversioner som implementeras av operativsystem som stöds. Om en rad som börjar med "Unicode" ingår har funktionen separata unicode- och Windows-kodsideversioner.

Not

När en funktion har en längdparameter för en teckensträng ska längden dokumenteras som ett antal TCHAR-värden i strängen. Den här datatypen refererar till byte för Windows-kodsideversioner av funktionen eller 16-bitars ord för Unicode-versioner. Funktioner som kräver eller returnerar pekare till otypade minnesblock, till exempel funktionen GlobalAlloc, tar vanligtvis en storlek i byte, oavsett vilken prototyp som används. Om allokeringen av otypat minne är för en sträng måste programmet multiplicera antalet tecken med sizeof(TCHAR). Mer information finns i Använda allmänna datatyper.

 

Unicode i Windows API-