JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

char to LPCSTR
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
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 20:04    Titel: char to LPCSTR Antworten mit Zitat

Hey,
und schon wieder ein Wille, aber kein Weg ^^

Also meine Frage diesmal:
Ich habe (auf mehrere Arten) versucht, einen String oder ein Char-Array in ein LPCSTR "umzuformen" um den Inhalt anhand einer Verwaltungsfunktion (die mit DrawText(..) von DirectX arbeitet) auszugeben ..

(jüngster Versuch:
CPP:
void COutputManagement::Textoutput(int sec, int x, int y, char* Text)
{

   m_TextBuffer.sec = sec; // HIER FEHLER
   m_TextBuffer.Frames = sec*m_ResManager->GetFramesPerSecond();
   m_TextBuffer.x = x;
   m_TextBuffer.y = y;
   m_TextBuffer.Text = Text;

   m_lText.push_back(m_TextBuffer);

    m_dxobj->DrawText(LPCSTR(*Text), x, y, D3DCOLOR_XRGB(0,255,0));
}


Kam aber immer nur Müll raus => Wenn was rauskam sowas wie |||||Y~*
(ich vermute mal Speicheradressen) ..

Hätte jemand einen Vorschlag zum Lösen des Problems ?
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



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

BeitragVerfasst am: 27.10.2005, 20:10    Titel: Antworten mit Zitat

caste mal nach const char* ansonsten hast du unicode aktiv da kommt sowas immer raus weil char kann man nicht so leicht zu wchar_t casten.
_________________
'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
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 20:13    Titel: Antworten mit Zitat

Warum dereferenzierst du eigentlich 'Text'?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 20:18    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
caste mal nach const char* ansonsten hast du unicode aktiv da kommt sowas immer raus weil char kann man nicht so leicht zu wchar_t casten.

Habe ich schon versucht ;(

GreveN hat Folgendes geschrieben:
Warum dereferenzierst du eigentlich 'Text'?

Oo ^^

Falls du meinst, dass ich nicht von Anfang an mit LPCSTR arbeite:
Es ist nicht ohne weiteres möglich, LPCSTR-Variablen mit sprintf zu bearbeiten, desshalb wandel ich erst am ende die Variablen um ...
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



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

BeitragVerfasst am: 27.10.2005, 20:23    Titel: Antworten mit Zitat

Arbeite mit der STL Wink Haste deine Ruhe vor sowas Smile

www.cppreference.com << strings
_________________
'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
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 20:27    Titel: Antworten mit Zitat

Mat hat Folgendes geschrieben:
Es ist nicht ohne weiteres möglich, LPCSTR-Variablen mit sprintf zu bearbeiten, desshalb wandel ich erst am ende die Variablen um ...


Das ist ja logo, dass C steht nicht umsonst für const. Wink

Mich wunderte dieser Ausdruck etwas:
CPP:
LPCSTR(*Text)


Müsste es nicht einfach:
CPP:
LPCSTR(Text)

lauten?

Oder besser:
CPP:
reinterpret_cast<LPCSTR>(Text)



Ok, ich hab seit ~40h nicht geschlafen und rede evt. Mist. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 20:36    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
Arbeite mit der STL Wink Haste deine Ruhe vor sowas Smile

www.cppreference.com << strings


In diesem Fall bin ich ja gezwungen mit LPCSTR zu arbeiten, um die DirectX Bequemlichkeit nutzen zu können .. ;(

Patrick hat Folgendes geschrieben:
Mich wunderte dieser Ausdruck etwas:

Ich hatte es auch schon ohne den Operator versucht => gleich schlechtes Ergebniss, da man aber an die DirectX-Funktion direkt eine char-Array (Zeiger auf ersten Speicherbeleg) oder einen konstanten Text geben kann dachte ich mir das es so wie geschrieben funzen würde --

Kei Erfolg (PS: Ich habe deine Variante nochmals getestet, ging leider auch nicht ..)

*EDIT*

Mit ATLCONV.H, also

CPP:
USES_CONVERSION;
//und
W2CA(LPSTR)


Kam auch nix gescheites raus, außer Compiler-Fehler ^^
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -


Zuletzt bearbeitet von Mat am 27.10.2005, 20:39, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


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

BeitragVerfasst am: 27.10.2005, 20:38    Titel: Antworten mit Zitat

CPP:
std::string text="Hallo Welt";
m_dxobj->DrawText(text.c_str(), x, y, D3DCOLOR_XRGB(0,255,0));


sollte gehen, beachte die funktion c_str()

hast du es denn mal mit direkt eingetragenen texten probiert was dann passiert? Was hast du überhaupt für einen Font geladen?
_________________
"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
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

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

Probier einfach mal:
CPP:
void COutputManagement::Textoutput(unsigned int sec, unsigned int x, unsigned int y, const std::basic_string<char>& Text)
{

   m_TextBuffer.sec = sec; // HIER FEHLER
   m_TextBuffer.Frames = sec*m_ResManager->GetFramesPerSecond();
   m_TextBuffer.x = x;
   m_TextBuffer.y = y;
   m_TextBuffer.Text = Text.c_str();

   m_lText.push_back(m_TextBuffer);

    m_dxobj->DrawText(Text.c_str(), x, y, D3DCOLOR_XRGB(0,255,0));
}


[Edit:] Mist, Fallen war schneller.


Zuletzt bearbeitet von GreveN am 27.10.2005, 22:07, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 20:53    Titel: Antworten mit Zitat

CPP:
strcpy(m_TextBuffer.Text , Text);

so sollte das funktionieren
dein Textbuffer.text muss aber ein feld von char sein also nicht nur char*.
CPP:
struct StructText //kA wie das ding bei dir heißt
{
 char Text[100]; // 100 Zeichen sollten reichen,
// nagut sind eigentlich nur 99 ;-) '\0' beachten
}

_________________
Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 20:56    Titel: Antworten mit Zitat

@Fallen & GreveN:
Eure Variante scheint zu kunktionieren Wink
(Das mit der Schriftart wird sich dann wohl erledigt haben)

Der Code sieht jetzt so aus :

CPP:
void COutputManagement::Textoutput(int sec, int x, int y, std::string Text)
{

   m_TextBuffer.sec = sec;
   m_TextBuffer.Frames = sec*m_ResManager->GetFramesPerSecond();
   m_TextBuffer.x = x;
   m_TextBuffer.y = y;
   m_TextBuffer.Text = Text;

   m_lText.push_back(m_TextBuffer);

    m_dxobj->DrawText(Text.c_str(), x, y, D3DCOLOR_XRGB(0,255,0));
}


Noch 2 Fragen erstmal: Gibt es eine ähnliche Funktion wie sprintf(..)-Funktion auch für Strings !? :-/

Und 2. (Siehe GreveN's Code) was bewirkt:
CPP:
const unsigned int& sec

Also const und (vorallem) unsigned ist ja klar, aber das & verwundert mich an der Stelle ein bisschen (und hat es Vorteile Variablen die Konstant sind auch auf const zu sätzen, oder ist das eher eine Frage der eleganz ?)

PS: Dickes Danke schanmal ! Wink
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 20:58    Titel: Antworten mit Zitat

@Dragon:

Deine Nachricht kam etwas zu spät Razz

PS: die Struktur heißt m_TextStruct ^^ also garnicht mal schlecht geraten Wink
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 21:11    Titel: Antworten mit Zitat

Mat hat Folgendes geschrieben:
Und 2. (Siehe GreveN's Code) was bewirkt:
CPP:
const unsigned int& sec

Also const und (vorallem) unsigned ist ja klar, aber das & verwundert mich an der Stelle ein bisschen (und hat es Vorteile Variablen die Konstant sind auch auf const zu sätzen, oder ist das eher eine Frage der eleganz ?)


Also const-correctness sorgt für ein ganzes Stück zusätzliche Sicherheit.

Wieder einmal ein Link aus meiner Lieblings-FAQ. Wink
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=constcor#Answ


[Edit:] Ups, wer lesen kann ist klar im Vorteil.

Durch das übergeben per Referenz verhinderst du die Erzeugung temporärer Instanzen der übergebenen Parameter.


[Edit:] Habe meinen Beitrag oben mal 'korrigiert', const bei unsigned int ist Schwachsinn. Alte hässliche Gewohnheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Slider|SD
Mini JLI'ler


Alter: 44
Anmeldedatum: 20.10.2005
Beiträge: 18
Wohnort: Gilching
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 22:18    Titel: Antworten mit Zitat

Dragon hat Folgendes geschrieben:
CPP:
strcpy(m_TextBuffer.Text , Text);

so sollte das funktionieren
dein Textbuffer.text muss aber ein feld von char sein also nicht nur char*.
CPP:
struct StructText //kA wie das ding bei dir heißt
{
 char Text[100]; // 100 Zeichen sollten reichen,
// nagut sind eigentlich nur 99 ;-) '\0' beachten
}


Sowas ist immer gefährlich, denn wenn der Text dann doch länger sein sollte, stürzt dein Programm entweder ab, oder man kann es hacken, in dem man absichtlich eine längere Eingabe erzwingt, und somit Code einschleusen kann. Sprich also, entweder std::string nutzen, obder vor dem strcpy ne Längenüberprüfung machen. Falls sowas öfter vorkommt, sollte man sich nen kleines Makro machen, dass einen sicheren strcpy macht.

Slider
_________________
Stefan Schwarzbach
Lead Programmer & Geschäftsführer
Grotesque - Die geniale Mischung aus Gothic , Final Fantasy und Monkey Island
Silent Dreams - We Create Dreams
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 27.10.2005, 22:28    Titel: Antworten mit Zitat

Slider : oder man kann es hacken
Krass - Das ist mir neu, aber ein guter gedanklicher Ansatz Wink
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
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