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
|
Verfasst am: 27.10.2005, 20:04 Titel: char to LPCSTR |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:10 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:13 Titel: |
|
|
Warum dereferenzierst du eigentlich 'Text'? |
|
Nach oben |
|
 |
Mat Senior JLI'ler

Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:18 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:27 Titel: |
|
|
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.
Mich wunderte dieser Ausdruck etwas:
Müsste es nicht einfach:
lauten?
Oder besser:
CPP: | reinterpret_cast<LPCSTR>(Text) |
Ok, ich hab seit ~40h nicht geschlafen und rede evt. Mist.  |
|
Nach oben |
|
 |
Mat Senior JLI'ler

Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:36 Titel: |
|
|
Patrick hat Folgendes geschrieben: | Arbeite mit der STL Haste deine Ruhe vor sowas
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 |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 27.10.2005, 20:38 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:41 Titel: |
|
|
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 |
|
 |
Dragon Super JLI'ler

Alter: 38 Anmeldedatum: 24.05.2004 Beiträge: 340 Wohnort: Sachsen Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:53 Titel: |
|
|
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 |
|
 |
Mat Senior JLI'ler

Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:56 Titel: |
|
|
@Fallen & GreveN:
Eure Variante scheint zu kunktionieren
(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 !  _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
 |
Mat Senior JLI'ler

Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 27.10.2005, 20:58 Titel: |
|
|
@Dragon:
Deine Nachricht kam etwas zu spät
PS: die Struktur heißt m_TextStruct ^^ also garnicht mal schlecht geraten  _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 27.10.2005, 21:11 Titel: |
|
|
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.
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 |
|
 |
Slider|SD Mini JLI'ler
Alter: 44 Anmeldedatum: 20.10.2005 Beiträge: 18 Wohnort: Gilching Medaillen: Keine
|
Verfasst am: 27.10.2005, 22:18 Titel: |
|
|
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 |
|
 |
Mat Senior JLI'ler

Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 27.10.2005, 22:28 Titel: |
|
|
Slider : oder man kann es hacken
Krass - Das ist mir neu, aber ein guter gedanklicher Ansatz  _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
 |
|