JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=ff3e3cc8df4026e1d6ae1b034732738cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Programme in UNICODE
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 18:38    Titel: Programme in UNICODE Antworten mit Zitat

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 Wink ) mal ne kurze Zusammenfassung geben wie man auf UNICODE umstellt (auch STL Strings & Stringstreams?) und was man dabei beachten muss.

Danke

Philipp
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 18:47    Titel: Antworten mit Zitat

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
CPP:
#define UNICODE
ü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 Wink)!

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 Wink

- 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 18:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 18:56    Titel: Antworten mit Zitat

Nein, aber wenn Du Dich an das hälst was ich gepostet habe und diese Datei benutzt, könntest Du später ganz einfach

CPP:
#define UNICODE
auskommentieren und neu compilieren und schwupp hast Du die ANSI-Variante ohne Fehler und Aufwand! Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 19:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 19:07    Titel: Antworten mit Zitat

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 Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 19:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 19:24    Titel: Antworten mit Zitat

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 Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 19:26    Titel: Antworten mit Zitat

wie werden eigentlich chinesische programme für win98 gemacht? auch mit solchen "tricks"?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 19:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:12    Titel: Antworten mit Zitat

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 Wink
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:40    Titel: Antworten mit Zitat

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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 11.06.2005, 20:41    Titel: Antworten mit Zitat

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 Wink

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 Wink
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 11.06.2005, 20:47    Titel: Antworten mit Zitat

naja ich werds morgen mal auf SE probieren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum