AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[C] TCHAR und Unicode

Ein Thema von Luckie · begonnen am 27. Sep 2006 · letzter Beitrag vom 7. Okt 2006
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

[C] TCHAR und Unicode

  Alt 27. Sep 2006, 09:34
Beruflich bedingt, muss ich mich mit C/C++ rumsch...auseinandersetzen. Da ich gerne von Anfang an auf der Sicherenseite sein will verwende ich nur jeweils die Unicode Funktionen und als Datentyp für Zeichenfolgen dann TCHAR. Das sieht dann zum Beispiel so aus:
Code:
/*
 *  SysErrorMessage
 *  Obtains error message strings for the system error codes returned by GetLastError
 * 
 */
TCHAR *SysErrorMessage (DWORD dwErrorCode, TCHAR *pszBuf, int nLenBuf)
{
  FormatMessage(
     FORMAT_MESSAGE_FROM_SYSTEM | (pszBuf ? 0 : FORMAT_MESSAGE_ALLOCATE_BUFFER),
    NULL,
    dwErrorCode ? dwErrorCode : GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    pszBuf ? pszBuf : (LPTSTR)&pszBuf,
    pszBuf ? nLenBuf : 0,
    NULL);
  return pszBuf;
}

/*
 *  FileExistsW
 *  Checks whether a given file exists or not
 * 
 */
BOOL FileExistsW(TCHAR *Filename) {
   WIN32_FIND_DATA wfd;
   HANDLE hFile;
   hFile = FindFirstFileW(Filename, &wfd);
   if (hFile != INVALID_HANDLE_VALUE) {
      FindClose(hFile);
   }
   return (BOOL)hFile;
}
Mache ich denn das so richtig? Funktionieren tut es, aber das muss noch lange nichts heißen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#2

Re: [C] TCHAR und Unicode

  Alt 27. Sep 2006, 10:54
...so richtig geblickt habe ich die C-TypenStruktur auch nicht. Ich arbeite mit wchar_t als Unicode-Typ. Für die Benutzung von TCHAR mußt Du beim Kompilieren das richtige Makro aktivieren, das habe ich noch nicht probiert. Durch meine Festlegung kann ich ausschließlich mit Unicode arbeiten aber das hat bisher auch keinen gestört.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: [C] TCHAR und Unicode

  Alt 27. Sep 2006, 11:36
Zitat von Luckie:
Mache ich denn das so richtig? Funktionieren tut es, aber das muss noch lange nichts heißen.
Das funktioniert so nur, wenn du das Symbol UNICODE definierst.

In der Datei <tchar.h> wird TCHAR eben als "char" oder als "wchar_t" definiert, je nachdem ob UNICODE definiert ist oder nicht. Dort gibt es auch eine ganze Menge von Definitionen, die mit "_t" beginnen (so wird z.B. _tcscpy zu strcpy oder wcscpy).

Auch in <windows.h> wird nach UNICODE unterschieden. Somit ist "FindFirstFile" einfach definiert als entweder "FindFirstFileA" oder "FindFirstFileW".

Fazit:

Wenn du <tchar.h> benutzt, dann benutze den Typen TCHAR und nicht explizit die Widechar-Funktionen des API. Außerdem solltest du alle Character- und String-Konstanten in _T() einschließen. Dann kannst du nämlich mit "-DUNICODE" eine Unicode-Anwendung compilieren und ohne diesen Schalter eben eine Ansi-Anwendung. Dort wo's nicht anders geht (z.B. ist "%s" in allen printf-Varianten immer ein Ansi-String und "%S" ein Unicode-String) musst du dann ggf.mit "#ifdef UNICODE ... #else ... #endif" den Code so oder so schreiben.

ODER

Wenn du immer die Unicode-Varianten nehmen willst, dann benutze auch direkt "wchar_t" als Typ, schreibe direkt L vor jede Character- und String-Konstante und benutze direkt die Widechar-Varianten der API-Funktionen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: [C] TCHAR und Unicode

  Alt 27. Sep 2006, 11:56
Ah ja. Gut. Dann werde ich TCHAR benutzen und auch nicht explizit die WideChar Funktionen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#5

Re: [C] TCHAR und Unicode

  Alt 7. Okt 2006, 20:12
LPTSTR und LPCTSTR kannst du statt TCHAR * und const TCHAR * nehmen ...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz