UNICODE und WindowsXP bei der WinAPI

Cusco

Erfahrenes Mitglied
Hi,

heute kam das Buch "Windows-Programmierung" von Amazon bei mir an. Ich bin jetzt im Zweiten Kapitel zum Thema UNICODE. So wie es Aussieht ist das Komplette Buch für UNICODE ausgelegt, in der Rezession bei Amazon hatte sich schon Jemand beschwert das die Beispiele unter WindowsXP nicht zu compilieren sind. Ich vermute das liegt an diesen UNICODE, den Petzold sagt das die Beispiele nur unter WindowNT laufen, welches UNICODE online ist. Win95 und Win98 unterstützen UNICODE nur zu einen kleinen Teil, NT dagegen läuft komplett darüber. Nun wie ist es bei WindowXP? Wie ist die Unterstützung von UNICODE? Gibt es jetzt eine Komplette Unterstützung? (Das Buch erschien noch kurz vor Win2000, aber bei Amazon Stand Ausgabe: März 2005! weshalb ich das Buch bestellte, da ich dachte es wäre relativ neu) So wie es Ausieht muss ich mich jetzt auf UNICODE umstellen. So wie ich rauslaß muss ich bei Jeden Beispiel zusätztlich die Zeile "#define UNICODE" aufnehmen, damit sie sich compileren lassen. Die bisherigen 2 Beispiele laufen noch ohne UNICODE was sich bald ändern wird, wie Petzold schreibt. Also reicht das define oder muss ich noch mehr beachten, oder werden die Sources unter XP erst gar nicht laufen und habe ich das Buchgeld dann aus dem Fenster geworfen?
 
Hallo,

UNICODE wird auf jeden Fall auch von XP unterstützt, eine entsprechende Programmentwicklung ist also kein Problem. Für welche Entwicklungsumgebung sind denn die Buchbeispiele vorgesehen? Sind es komplette Projekte oder nur einzelne Sourcecodedateien?
Die Projekte müssen speziell für UNICODE angepasst werden und es müssen die Unicode-Bibliotheken der Entwicklungsumgebung müssen installiert sein. Bei Verwendung des Visual Studio .NET müssen z.B. diese Projekteinstellungen vorgenommen werden:

C/C++ -> Präprozessor ->Präprozessordefinitionen: _UNICODE zur Liste hinzufügen
Linker -> Erweitert ->Einstiegspunkt: wWinMainCRTStartup einsetzen

Gruß
MCoder
 
Es sind einfach .c - Sources mehr nicht, keine Projektdateien gar nix nur der blanke Source, das Buch schlägt Visual C++ und genau darüber sind auch die Beispiele erklärt, bei Visual steht das dann UNICODE irgendwo ins Projekt reingeschrieben werden soll. Ich nutze aber den Borlandcompiler da habe ich keine Projekt-Datei ausser von Vide (selber angelegt), mit den ich mich nicht so recht anfreunden kann. DIe Sources sind alle in C nicht C++ obwohl das buch Visual C++ vorschlägt
 
Solange die Beispiele nur aus Sourcecodedateien bestehen und sich auf die Windows-API beschränken, solltest du auch mit Borland gut zurecht kommen. Wie man UNICODE-Projekt für Borland einrichtet, weiß ich nicht, allerdings sollten sich die Sourcen auch ohne UNICODE verwenden lassen. Die Windows API stellt ihre Funktion sowohl als UNICODE als auch als Nicht-UNICODE Varianten bereit. Diese sollten in der Regel gegeneinander austauschbar sein. Ggf. müssen also die Sourcen angepasst werden.

Gruß
MCoder
 
Ich versuche mir gerade ein paar Routienen zurecht zu legen :)
Sie sollen mit und ohne UNICODE funktionieren, ohne UNICODE gehen Sie schon, aber nicht mit, weil ich noch nicht rausgefunden habe was der UNICODE-Ersatz für tolower ist. Meine Theorie ist _wcslwr aber da habe ich ein Pointerproblem.

Code:
for(zaehladresse = textadresse;*zaehladresse>TEXT("\0");zaehladresse++)
        {
             #ifdef UNICODE
             *zaehladresse = _wcslwr(*zaehladresse);
             #else
             *zaehladresse = tolower(*zaehladresse);
             #endif
         }

Wie sieht das endbyte bei UNICODE aus? Auch einfach nur 0? die For-Anweisung hat auch einen Fehler unter UNICODE ich weiss nicht genau wie ich die schleife halten soll.

Edit: Vielleicht sollte ich noch sagen das die Pointer mit TCHAR versehen sind, dieser Typ ändert sich je nachdem ob UNICODE eingestellt ist oder nicht. TEXT() Wandelt die String in UNICODE um wenn es eingestellt ist. Das sind beifde Standart deklaration von Windows.h
 
Zuletzt bearbeitet:
Cusco hat gesagt.:
Code:
for(zaehladresse = textadresse;*zaehladresse>TEXT("\0");zaehladresse++)
Du vergleichst hier Äpfel mit Birnen, bzw. einen einzelnen TCHAR mit einem TCHAR* - das geht so nicht. Das String-Terminierungszeichen hat sich in Unicode nicht geändert und muß auch nicht irgendwie umgewandelt werden. Und auf "größer als '\0' " zu prüfen halte ich auch für eine schlechte Idee - ein char kann nämlich auch negativ sein. Warum prüfst du nicht einfach auf "ungleich '\0' " ?

Gruß
 
deepthroat hat gesagt.:
Du vergleichst hier Äpfel mit Birnen, bzw. einen einzelnen TCHAR mit einem TCHAR* - das geht so nicht. Das String-Terminierungszeichen hat sich in Unicode nicht geändert und muß auch nicht irgendwie umgewandelt werden. Und auf "größer als '\0' " zu prüfen halte ich auch für eine schlechte Idee - ein char kann nämlich auch negativ sein. Warum prüfst du nicht einfach auf "ungleich '\0' " ?

Gruß

Ja stimmt, ich habe das jetzt Korrigiert. Aber nun fehlt mir Trozdem noch der tolower-Ersatz :(
 
Die UNICODE-Variante für "tolower" ist "towlower".
Hier ist eine Liste aus der MSDN mit Routine Mappings, die für dich ganz hilfreich sein könnte.

Gruß
MCoder
 
MCoder hat gesagt.:
Die UNICODE-Variante für "tolower" ist "towlower".
Hier ist eine Liste aus der MSDN mit Routine Mappings, die für dich ganz hilfreich sein könnte.

Gruß
MCoder

Ah gut, ich hatte zwar schon ne liste gefunden heute morgen aber die war bei weiten nicht so umfrangreich, dafür aber in deutsch, aber "deine" ist besser :)

Edit: Die Informationen In dem Buch Windows-Programmierung scheinen ein wenig veraltert zu sein, zumindest schreibt Petzold in den Buch das für Windows kein ersatz von printf gibt, das hielten dir Entwickler für unnötig. Aber es gibt in und zwar wprintf, das habe ich heute morgen in der Liste gefunden, mich erst gewundert, dann gefreut und gleich eingesetzt :)
 
Zuletzt bearbeitet:
Zurück