Luckies Kommentar leicht korrigiert:
Unter NT ff. Gibt es für
fast jede Funktion, die eine Zeichenkette
als Parameter entgegennimmt oder zurückliefert, immer noch eine
UniCode (WideString) Version.
... Gegenbeispiel: GetProcAddress()
Zitat von
Luckie:
Wobei die
Ansi Versionen leer sind und nur die
UniCode Versionen aufrufen. Dies hat kompatibilitäts Gründe.
Irrtum. A.) man kann kaum von leer sprechen, denn sie tun was und B.) rufen sie oft garnicht eine
Unicode-Version sondern "Zwischenfunktionen" auf. Das kann man am besten mit einem Disassembler oder Debugger und den Symbolen von MS sehen.
Übrigens, @Arnulf, es gibt mehrere
Unicode-Standards, daher muß man eingrenzen, daß wir bei Windows NT ff. nur vom 16bittigen
Unicode-Zeichensatz reden. Es gibt noch solche mit Variabler Zeichenbreite und solche mit mehr als 16bit (namentlich mit 32bit).
Unicode ermöglicht es im Gegensatz zu dem Codepagemodell, welches mit
ANSI (und den Geschwisterchen) verfolgt wurde, mehrere verschiedene Zeichensätze (zB Hebräisch, Chinesisch und Russisch) zusammen darzustellen. Bei
ANSI ist immer nur eine dieser Codeseiten aktiv!
Unter C/C++ werden die Funktionen je nach Präprozessorschalter als A oder W eingebunden. Der Name selbst wird vom Präprozessor als Makro ohne A/W umdefiniert. So wird es sehr leicht ein Programm sowohl als
Unicode- als auch als
Ansi-Version zu kompilieren.