Freigeben über


Konventionen für Funktionsprototypen

Das Windows SDK stellt Funktionsprototypen in generischen, Windows-Codepage-und Unicode--Versionen bereit. Die Prototypen können kompiliert werden, um entweder Windows-Codeseitenprototypen oder Unicode-Prototypen zu erstellen. Alle drei Prototypen werden in diesem Thema behandelt und werden durch Codebeispiele für die SetWindowText--Funktion veranschaulicht.

Im Folgenden sehen Sie ein Beispiel für einen generischen Prototyp.

BOOL SetWindowText(
  HWND hwnd,
  LPCTSTR lpText
);

Die Headerdatei stellt den generischen Funktionsnamen bereit, der als Makro implementiert wird.

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

Der Präprozessor erweitert das Makro entweder in die Windows-Codeseite oder in den Unicode-Funktionsnamen. Der Buchstabe "A" (ANSI) oder "W" (Unicode) wird nach Bedarf am Ende des generischen Funktionsnamens hinzugefügt. Die Headerdatei stellt dann zwei spezifische Prototypen bereit, eine für Windows-Codeseiten und eine für Unicode, wie in den folgenden Beispielen gezeigt.

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

Wie in Windows-Datentypen für Zeichenfolgenerläutert, verwendet der generische Funktionsprototyp den Datentyp LPCTSTR für den Textparameter. Der Prototyp der Windows-Codepage verwendet jedoch den Typ LPCSTR, und der Unicode-Prototyp verwendet LPCWSTR.

Für alle Funktionen mit Textargumenten sollten Anwendungen normalerweise die generischen Funktionsprototypen verwenden. Wenn eine Anwendung "UNICODE" entweder vor den #include Anweisungen für die Headerdateien oder während der Kompilierung definiert, werden die Anweisungen in Unicode-Funktionen kompiliert.

Anmerkung

Neue Windows-Anwendungen sollten Unicode verwenden, um die Inkonsistenzen unterschiedlicher Codeseiten zu vermeiden und die Lokalisierung zu vereinfachen. Sie sollten mit generischen Funktionen geschrieben werden und unicode definieren, um die Funktionen in Unicode-Funktionen zu kompilieren. An den wenigen Stellen, an denen eine Anwendung mit 8-Bit-Zeichendaten arbeiten muss, kann sie explizit die Funktionen für Windows-Codeseiten verwenden.

 

Ihre Anwendung sollte immer einen generischen Funktionsprototyp mit den generischen Zeichenfolgen- und Zeichentypen verwenden. Alle Funktionsnamen, die mit einem Großbuchstaben "W" enden, verwenden Unicode, d. h. breite Zeichen, Parameter. Einige Funktionen sind nur in Unicode-Versionen vorhanden und können nur mit den entsprechenden Datentypen verwendet werden. Beispielsweise verfügen LCIDToLocaleName- und LocaleNameToLCID- nur über Unicode-Versionen.

Der Abschnitt "Anforderungen" in der Referenzdokumentation für jede Unicode- und Zeichensatzfunktion enthält Informationen zu den Funktionsversionen, die von unterstützten Betriebssystemen implementiert werden. Wenn eine Zeile, die mit "Unicode" beginnt, enthalten ist, weist die Funktion separate Unicode- und Windows-Codeseitenversionen auf.

Anmerkung

Wenn eine Funktion einen Längenparameter für eine Zeichenfolge aufweist, sollte die Länge als Anzahl von TCHAR-Werten in der Zeichenfolge dokumentiert werden. Dieser Datentyp bezieht sich auf Bytes für Windows-Codeseitenversionen der Funktion oder 16-Bit-Wörter für Unicode-Versionen. Funktionen, die Zeiger auf nicht typisierte Speicherblöcke erfordern oder zurückgeben, z. B. die GlobalAlloc--Funktion, nehmen in der Regel eine Größe in Byte ein, unabhängig vom verwendeten Prototyp. Wenn die Zuordnung des nicht typisierten Speichers für eine Zeichenfolge gilt, muss die Anwendung die Anzahl der Zeichen mit Sizeof(TCHAR) multiplizieren. Weitere Informationen finden Sie unter Using Generic Data Types.

 

Unicode in der Windows-API