INFO: Tipps für DBCS-kompatible Anwendungen schreiben

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 75439
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
3.00 3.10 WINDOWS Kbprg
Zusammenfassung
Zeichenfolgenoperationen in Systemen, die ein Doppelbyte-Zeichensatz (DBCS) unterscheiden sich geringfügig von einem System Single-Byte-Zeichensatz. Dieser Artikel enthält Richtlinien für die Arbeit erforderlich, eine Anwendung für ein Single-Byte-System mit einem DBCS-System geschrieben port zu reduzieren.
Weitere Informationen
In einen Double-Byte-Zeichensatz erfordern einige Zeichen zwei Bytes, während einige nur ein Byte erforderlich. Der Language-Treiber kann diese zwei Arten von Zeichen, indem Sie einige Zeichen als "führende Bytes" unterscheiden. Ein führendes Byte folgt ein anderes Byte (eine "Tail") um eine Doppelbyte-Zeichen (Datenbank) zu erstellen. Der Satz der führende Bytes unterscheidet sich für jede Sprache. Führende Bytes sind immer garantiert Zeichen erweitert werden; keine 7-Bit-ASCII-Zeichen können führende Bytes. Das Tail Byte kann jedes Byte außer NULL-Byte sein. Am Ende einer Zeichenfolge wird immer als das erste NULL Byte in der Zeichenfolge definiert. Führende Bytes sind legal Tail Byte; die einzige Möglichkeit, mitzuteilen, wenn ein Byte als führendes Byte fungiert, ist aus dem Kontext.

Die Windows Software Development Kit (SDK) Version 3.0 enthält zwei Funktionen zum Verschieben über Zeichenfolgen, die DBCs enthalten können: AnsiNext() und AnsiPrev() . Die AnsiPrev() -Funktion ist ein immer teuer Aufruf, da es durch die Zeichenfolge, vom Anfang ausführen muss um festzustellen, wo das vorherige Zeichen beginnt. Es wird empfohlen, nach Zeichen vom Anfang statt am Ende einer Zeichenfolge zu suchen.

Das Windows SDK Version 3.1 enthält die IsDBCSLeadByte() -Funktion, die TRUE zurückgibt, und nur, wenn das Byte ein führendes Byte sein kann. Da diese Funktion eine Char-Parameter kann nicht es Bericht Wenn das Byte ein führendes Byte ist (dazu würde Kontext erforderlich).

Damit nicht-DBCS-Code so schnell wie möglich ausgeführt wird, kann eine Quelldatei "# ifdef DBCS" verwenden, um Code, der nur für DBCS ist, und zwei Versionen der Objektdatei (OBJ) kompilieren. Zum Beispiel:
   #ifdef DBCS     for (pszTemp = szString; *pszTemp; pszTemp = AnsiNext(pszTemp))   #else     for (pszTemp = szString; *pszTemp; ++pszTemp)   #endif   ...				
damit den Code leichter zu lesen sind, konnte Makros für die AnsiNext() und AnsiPrev() -Funktion von eine Anwendung definieren, wenn DBCS nicht definiert ist:
   #ifndef DBCS   #define AnsiNext(x) ((x)+1)   #define AnsiPrev(y, x) ((x)-1)   #ifdef WIN31   #define IsDBCSLeadByte(x) (FALSE)   #endif   #endif				
mit diese Definitionen an Stelle der gesamte Code geschrieben werden kann für DBCS. Beachten Sie, dass die AnsiNext() -Funktion nicht über das Ende einer Zeichenfolge geht und die AnsiPrev() -Funktion nicht hinter dem Anfang einer Zeichenfolge gehen, wird während die Makros werden. Da der Parameter "y" in das Makro AnsiPrev() ignoriert wird, erhalten einige Code darüber hinaus unterschiedliche Ergebnisse bei der Kompilierung mit und ohne DBCS definiert. Der folgende Code ist ein Beispiel für dieses Phänomen:
   pszEnd = AnsiPrev(++pszStart, pszEnd);				
die folgenden Code wird das finden des Offset der Dateiname in einen vollständigen Pfadnamen veranschaulicht:
   LPSTR GetFilePtr(LPSTR lpszFullPath)   {    LPSTR lpszFileName;    for (lpszFileName = lpszFullPath; *lpszFullPath;               lpszFullPath = AnsiNext(lpszFullPath))        if (*lpszFullPath == ':' || *lpszFullPath == '\\')            lpszFileName = lpszFullPath + 1;    return lpszFileName;   }				
beachten, ': 'und' \\ ' sind garantiert nicht führende Bytes. Die Suche am Anfang der Zeichenfolge statt am Ende damit mit der AnsiPrev() -Funktion wurde gestartet.

Der folgende Code veranschaulicht eine Zeichenfolgenkopie in einen Puffer Größe beschränkt. Beachten Sie, dass es wird sichergestellt, dass die Zeichenfolge nicht mit ein führendes Byte endet.
   int StrCpyN(LPSTR lpszDst, LPSTR lpszSrc, unsigned int wLen)   {    LPSTR lpEnd;    char cTemp;    // account for the terminating NULL    --wLen;    for (lpEnd = lpszSrc; *lpEnd && (lpEnd - lpszSrc) < wLen;               lpEnd = AnsiNext(lpEnd))        ;  // scan to the end of string, or wLen bytes    // The following can happen only if lpszSrc[wLen-1] is a lead    // byte, in which case do not include the previous DBC in the copy.    if (lpEnd - lpszSrc > wLen)        lpEnd -= 2;    // Terminate the source string and call lstrcpy.    cTemp = *lpEnd;    *lpEnd = '\0';    lstrcpy(lpszDst, lpszSrc);    *lpEnd = cTemp;   }				
3.00 3.10

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 75439 – Letzte Überarbeitung: 02/02/2014 13:56:29 – Revision: 1.1

Microsoft Windows Software Development Kit 3.1

  • kbnosurvey kbarchive kbmt kb16bitonly kbinfo KB75439 KbMtde
Feedback
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)