Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 11.06.2005, 18:38 Titel: Programme in UNICODE |
|
|
Tja,
ich will meine Programme auf Unicode umstellen, weiß aber nicht wirklich wie, weil ich noch nie damit gearbeitet habe. Ist sicher nicht schwer, aber kann einer (vielleicht Patrick ) mal ne kurze Zusammenfassung geben wie man auf UNICODE umstellt (auch STL Strings & Stringstreams?) und was man dabei beachten muss.
Danke
Philipp |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 11.06.2005, 18:47 Titel: |
|
|
Hi,
das Thema UNICODE ist eigentlich sehr einfach geworden dank der STL!
Als 1. sollte man sich einen Header schreiben für "alltägliche" UNICODE-Funktionen.
Das könnte dann so aussehen: CPP: | // ###########################################################################
// Datei: unicode.h
// ###########################################################################
// Autor: Patrick Ullmann
// Erstellt: 08.06.2005
// Änderungen: 08.06.2005 (Patrick) Datei erstellt
// ###########################################################################
// Beschreibung: Unicode Header
#if defined (_MSC_VER) && (_MSC_VER >= 1000)
#pragma once
#endif // Include Guard für VC++ Compiler
#if !defined(__unicode_h__)
#define __unicode_h__
// I N C L U D E S ###########################################################
#include <windows.h>
#include <string>
// M A K R O S ###############################################################
#if defined(UNICODE) // Unicode benutzung?
#define __T(quote) L##quote // Hilfsmakro speziell für Unicode
typedef wchar_t char_t; // Typdefinition
#define __vsctprintf _vscwprintf
#define __vsprintf vswprintf
#else
#define __T(quote) (quote) // Hilfsmakro speziell für ANSI
typedef char char_t; // Typdefinition
#define __vsctprintf _vscprintf
#define __vsprintf vsprintf
#endif
// Das eigentliche Hilfsmakro
#define T(quote) __T(quote)
// F U N K T I O N E N #######################################################
// Hilfsfunktion für Strings in sprintf-manier doch diesmal ohne
// angeforderten Puffer
inline ::std::basic_string<char_t> uniprintf (const char_t* format, ...)
{
// Hilfsvariable
::va_list args;
// Extraktion beginnen
va_start (args, format);
// Länge bestimmen
unsigned long length = ::__vsctprintf (format, args) + 1;
// Speicher bereitstellen und Daten hinzufügen
char_t* buffer = new char_t [length];
::__vsprintf (buffer, format, args);
// String an den Rückgabewert übergeben
::std::basic_string<char_t> result;
result = (buffer);
// Aufräumen und fertig ist
delete [] buffer;
return (result);
}
#endif // Include Guard |
Wenn man char bzw. wchar_t benutzen will, benutzt man nun nur noch char_t (t für Type), da dieses an die momentan Unterstützte Plattform ausgerichtet wurde.
Mit einem über der <windows.h> aktiviert man UNICODE.
Um Strings zu benutzen tust Du sowas:
CPP: | ::std::basic_string<char_t> mystring (T("Hallo dies ist ein String!")); |
Dabei darf man das T("") nie vergessen, sonst wird ein Port später auf ANSI oder zu UNICODE unglaublich umständlich (und ich weiß was ich da sage )!
UNICODE-Plattformen sind die WindowsNT-Serien (NT, XP, 2K, Longhorn, CE). Windows9x und DOS laufen nur auf ANSI! Führt man auf diesen Betriebssystemen ein UNICODE-Programm ausführen, schlägt das ::RegisterClass/Ex bei der Fensterklassenregistierung fehl.
Das wars eingentlich schon
- Patrick _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 11.06.2005, 18:54 Titel: |
|
|
cool, danke erstmal
Patrick hat Folgendes geschrieben: |
UNICODE-Plattformen sind die WindowsNT-Serien (NT, XP, 2K, Longhorn, CE). Windows9x und DOS laufen nur auf ANSI! Führt man auf diesen Betriebssystemen ein UNICODE-Programm ausführen, schlägt das ::RegisterClass/Ex bei der Fensterklassenregistierung fehl. |
Bedeutet das für Win98 kann ich keine UNICODE Programme machen? |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 11.06.2005, 18:56 Titel: |
|
|
Nein, aber wenn Du Dich an das hälst was ich gepostet habe und diese Datei benutzt, könntest Du später ganz einfach
auskommentieren und neu compilieren und schwupp hast Du die ANSI-Variante ohne Fehler und Aufwand! _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 11.06.2005, 19:02 Titel: |
|
|
aber was wenn ich jetzt ein programm veröffentlichen will was:
auf win98 und winxp läuft,
alle sprachen der welt unterstützt...
geht das dann nicht? |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 11.06.2005, 19:07 Titel: |
|
|
Jain!
Unter NT Systemen ist natürlich UNICODE besser. Bei Win9x Systemen (Auf die man langsam Anfangen zu pfeifen sollte, da zu alt) ist das sehr Tricky!
Da gibt es von Microsoft spezielle Funktionen für, aber die lässt man besser da wo sie sind, in den Tiefen der MSDN _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 11.06.2005, 19:14 Titel: |
|
|
hmmm... wie machen das kommerzielle Programme? Die sind ja wohl auch in UNICODE weil sie allemöglichen Sprachen unterstützen und auf Win98 sollten heutige Programme eigentlich auch noch laufen (Win95 ist wirklich zu alt... 10 Jahre... puh). Tja, aber was macht man für W98?
EDIT: Man kommt wohl nicht um diese "speziellen" Funktionen herum? Wenn nein... wie heißen die denn? |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 11.06.2005, 19:24 Titel: |
|
|
http://msdn.microsoft.com/library/en-us/intl/unicode_17si.asp
Kommerzielle Produkte machen das recht interessant! Bei DeusEx2 weiß ich das die exe Datei aus 2 Dateien besteht und von einer 3. Datei aus gestartet wird:
Beispiel:
start.exe wird ausgeführt und identifiziert das System (NT oder 9x).
game.bat (ansi.exe [speicherpunkt 0 bis 250] und uni.exe enthalten[speicherpunkt 250 bis 500])
Wenn ANSI, wird die exe im Bereich 0 bis 250 aus der game.bat in den Ram geladen und gestartet, ansonsten wird 250 bis 500 in den Ram geladen.
Mir ist sowas jedoch zu Umständlich und ich bleibe bei UNICODE _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 11.06.2005, 19:26 Titel: |
|
|
wie werden eigentlich chinesische programme für win98 gemacht? auch mit solchen "tricks"? |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 11.06.2005, 19:39 Titel: |
|
|
Da wird ein wchar_t zu char mit diesen "Tricky Funktionen" konvertiert, der char wird jedoch dann doppelt soviel Speicher benutzen als zuvor zur Kompensation. Aber wie schon gesagt: 9x Systeme werden sogut wie gar nicht mehr benutzt, und DX9c läuft darauf sowieso nicht mehr. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 11.06.2005, 20:01 Titel: |
|
|
Patrick hat Folgendes geschrieben: | 9x Systeme werden sogut wie gar nicht mehr benutzt, und DX9c läuft darauf sowieso nicht mehr. |
hmm also auf 98 läuft dx9c schon |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 11.06.2005, 20:12 Titel: |
|
|
auf SE kann schon sein, aber bei mir auf Win98 normal leider nicht?
Na ja, das Dingen ist ja bald auch schon 6 Jahre alt, und NT war und wird die Zukunft von Windows bleiben _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 11.06.2005, 20:40 Titel: |
|
|
Patrick hat Folgendes geschrieben: | Na ja, das Dingen ist ja bald auch schon 6 Jahre alt, und NT war und wird die Zukunft von Windows bleiben |
Klar! Mit all seinen Sicherheitslücken und (sperrangelweit offenen) Scheunentoren, die es so hat...
Aber diese Diskussion lassen wir besser! Das hatten wir schon! Das artet nur in Streit aus.
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 11.06.2005, 20:41 Titel: |
|
|
FH hat Folgendes geschrieben: | Patrick hat Folgendes geschrieben: | Na ja, das Dingen ist ja bald auch schon 6 Jahre alt, und NT war und wird die Zukunft von Windows bleiben |
Klar! Mit all seinen Sicherheitslücken und (sperrangelweit offenen) Scheunentoren, die es so hat...
Aber diese Diskussion lassen wir besser! Das hatten wir schon! Das artet nur in Streit aus.
Gruß
FH |
*hust* ich glaub er meinte das weil alle neuen Windowsversionen auf NT basieren _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
philipp_boeing JLI'ler
Alter: 34 Anmeldedatum: 26.07.2003 Beiträge: 188
Medaillen: Keine
|
Verfasst am: 11.06.2005, 20:47 Titel: |
|
|
naja ich werds morgen mal auf SE probieren |
|
Nach oben |
|
|
|