Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn die Manifestkonstante _MBCS definiert ist, wird eine bestimmte generische Textroutine einer der folgenden Arten von Routinen zugeordnet:
Eine SBCS-Routine, die ordnungsgemäß Multibytes, Zeichen und Zeichenfolgen verarbeitet. In diesem Fall werden Zeichenfolgenargumente vom Typ
char*erwartet. Beispielsweise wird_tprintfprintfzugeordnet; die Zeichenfolgenargumente fürprintfsind vom Typchar*. Wenn Sie generischen Text vom Datentyp_TCHARfür Ihre Zeichenfolgentypen verwenden, stimmen die formalen und tatsächlichen Parametertypen fürprintfüberein, da_TCHAR*char*zugeordnet wird.Eine MBCS-spezifische Routine. In diesem Fall werden Zeichenfolgenargumente vom Typ
unsigned char*erwartet. Beispielsweise wird_tcsrev_mbsrevzugeordnet, wobei eine Zeichenfolge vom Typunsigned char*erwartet und zurückgegeben wird. Wenn Sie den_TCHARGenerischen Text-Datentyp für Ihre Zeichenfolgentypen verwenden, gibt es einen potenziellen Typkonflikt, da_TCHARder Typ zugeordnetcharist.
Im Folgenden werden drei Lösungen vorgestellt, um einen solchen Typenkonflikt (und die daraus resultierenden C-Compilerwarnungen oder C++-Compilerfehler) zu verhindern:
Verwendet das Standardverhalten. tchar.h stellt Prototypen für generische Textroutinen für Routinen in den Laufzeitbibliotheken bereit, wie im folgenden Beispiel gezeigt.
char * _tcsrev(char *);Im Standardfall, der Prototyp für
_tcsrevKarten bis zu_mbsreveinem Thunk in Libc.lib. Dadurch werden die Typen der_mbsreveingehenden Parameter und der ausgehende Rückgabewert von_TCHAR*(d. hchar *. ) inunsigned char *. Diese Methode stellt den Typabgleich bei Der Verwendung_TCHARsicher, ist aber aufgrund des Funktionsaufrufaufwands relativ langsam.Verwenden Sie Inlinefunktionen, indem Sie die folgende Präprozessoranweisung in Ihren Code integrieren.
#define _USE_INLININGDiese Methode bewirkt, dass eine Inlinefunktion thunk, die in tchar.h bereitgestellt wird, die generische Textroutine direkt der entsprechenden MBCS-Routine zuzuordnen. Der folgende Codeauszug aus tchar.h enthält ein Beispiel dafür, wie dies geschieht.
__inline char *_tcsrev(char *_s1) {return (char *)_mbsrev((unsigned char *)_s1);}Wenn Sie Inlining verwenden können, ist dies die beste Lösung, da es Typübereinstimmung sicherstellt und keinen zusätzlichen Zeit- oder Kostenaufwand mit sich bringt.
Verwenden Sie die direkte Zuordnung, indem Sie die folgende Präprozessor-Anweisung in Ihren Code integrieren.
#define _MB_MAP_DIRECTDieser Ansatz bietet eine schnelle Alternative, wenn Sie das Standardverhalten nicht verwenden möchten oder kein Inlining verwenden können. Sie bewirkt, dass die generische Textroutine von einem Makro direkt der MBCS-Version der Routine zugeordnet wird, wie im folgenden Beispiel von tchar.h.
#define _tcschr _mbschrWenn Sie diesen Ansatz anwenden, müssen Sie darauf achten, dass geeignete Datentypen für Zeichenfolgenargumente und Zeichenfolgenrückgabewerte verwendet werden. Um eine ordnungsgemäße Typübereinstimmung sicherzustellen, können Sie die Typumwandlung oder generischen Text vom Datentyp
_TXCHARverwenden._TXCHARwird Typcharim SBCS-Code zugeordnet, jedoch Typunsigned charim MBCS-Code. Weitere Informationen zu generischen Textmakros finden Sie unter Generic-Text-Zuordnungen in der Laufzeitbibliotheksreferenz.