Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

alexm

Frischling

  • »alexm« ist der Autor dieses Themas

Beiträge: 71

Wohnort: Wien

  • Private Nachricht senden

1

29.05.2006, 15:44

std::string in LPCWSTR konvertieren (für MessageBox)

hi allerseits :-)

ich suche nun schon länger verzweifelt im google nach einer möglichkeit, wie ich einen STL-String in einen LPCWSTR für die verwendung in einer MessageBox konvertieren kann, finde aber nichts brauchbares :cry:

Beispiel:

C-/C++-Quelltext

1
2
std::basic_string<wchar_t> msg ( L"hallo");
MessageBoxW(0,LPCWSTR(msg),TEXT("Logfile-Text"),MB_OK);


Fehlermeldung:

Zitat

error C2440: '<function-style-cast>' : cannot convert from 'std::basic_string<_Elem,_Traits,_Ax>' to 'LPCWSTR'


kann mir da bitte jemand weiterhelfen? :?:

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

2

29.05.2006, 16:05

wstring::c_str()
In solchen Fällen hilft die MSDN

mfg Philipp

alexm

Frischling

  • »alexm« ist der Autor dieses Themas

Beiträge: 71

Wohnort: Wien

  • Private Nachricht senden

3

29.05.2006, 16:25

ah habs schon:

C-/C++-Quelltext

1
2
3
4
5
std::basic_string<wchar_t> str_msg ( L"hallo");

LPCWSTR msg = str_msg.c_str();

MessageBoxW(0,msg,L"Logfile-Text",MB_OK);


ps. MSDN hat mir nix geholfen :?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

4

30.05.2006, 12:02

C-/C++-Quelltext

1
2
3
std::basic_string<wchar_t> str_msg ( L"hallo");

MessageBoxW(0,str_msg.c_str(),L"Logfile-Text",MB_OK);


Wer suchet der findet ;)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrf_string_basicstring_members.asp

alexm

Frischling

  • »alexm« ist der Autor dieses Themas

Beiträge: 71

Wohnort: Wien

  • Private Nachricht senden

5

30.05.2006, 12:03

auf die gefahr hin, dass ich in der luft zerfetzt werde, hätt ich trotzdem noch eine bescheidene frage zu der angelegenheit:

kann bitte jemand so nett ein, und mir sagen, was dieses L genau soll bzw. ob das überhaupt so verwendet werden muss?

ich blick da glaub ich nämlich noch nicht so ganz dahinter.
beim compiler hab ich als character-set:multibyte eingestellt.

lieg ich mit folgenden überlegungen richtig?
unicode == char == us-zeichensatz mit 8 bit, keine sonderzeichen.
multibyte == wchar_t == zb.deutscher zeichensatz mit 16 bit und umlauten

ich find das nämlich etwas seltsam, dass ich nun in meinem ganzen code, überall vor einem "text" ein L schreiben muss.

john

Alter Hase

Beiträge: 786

Beruf: Schüler

  • Private Nachricht senden

6

30.05.2006, 12:58

Hi,

also was du gesagt hast ist so nicht richtig.

Quellcode

1
typedef unsigned short wchar_t

Das sind dann 16 Bit.
Wenn du das "L" weglässt, erzeugst du jeweils
8Bit-Codes. D.h. du würdest dann einen Fehler vom Compiler bekommen,
dass du dieses hier vergisst (bei Zuweisung wchar_t).

Bei Multibyte-Zeichensätzen hast du entweder 1 Byte oder 2 Byte pro Zeichen.
Dies ist bei Unicode nicht so, dort haben die Zeichen jeweils 2 Byte, wobei das
bei Multibyte-Zeichensätze nicht durchgehend der Fall ist, weswegen der Umgang
mit Unicode auch als unproblematischer angesehen wird.

Ein sehr wichtiger Vorteil von Unicode ist eben, dass es hier nur einen einzigen
Zeichensatz gibt.
Aber Nachteile gibt es ja (fast) überall, es nimmt nun einmal mehr Platz weg.

Microsoft hat früh begonnen, auf Unicode zu setzen und baute Windows NT von Anfang
an auf Unicode auf.

Ich hoffe mal, dass ich das soweit alles noch richtig zusammengeschrieben habe. Wenn du das noch genauer wissen willst, dann würde ich einfach nochmal vorschlagen zu googlen,
falls du das noch nicht getan hast, oder aber dir ein Buch zuzulegen.
Im Petzold zum Beispiel ist das sehr gut erklärt, von wo ich mein bisheriges Wissen in dieser Hinsicht
zum großen Teil auch bezogen habe.
mfg
john

Anonymous

unregistriert

7

30.05.2006, 20:08

John91
Alles perfekt getroffen ;)

john

Alter Hase

Beiträge: 786

Beruf: Schüler

  • Private Nachricht senden

8

30.05.2006, 20:09

Zitat von »"nix da"«

John91
Alles perfekt getroffen ;)

Da bin ich ja erleichtert. :) ;)
mfg
john

alexm

Frischling

  • »alexm« ist der Autor dieses Themas

Beiträge: 71

Wohnort: Wien

  • Private Nachricht senden

9

31.05.2006, 08:34

*hehe*
danke mal für die erklärung.
jaja der petzold... hab das vom petzold eh gelesen aber irgendwie bin ich daraus nicht schlau geworden. die abhandlung über ansi und alles mögliche umfasst ja soweit ich mich erinnere fast 10 seiten oder mehr in seinem buch. da weiss man zum schluss nimmer, was am anfang gestanden ist *lol*

hmmm ... aber jedenfalls ist das demnach schon so, dass unicode keine sonderzeichen wie etwa umlaute hat? wenn ich eine app für den deutschen markt schreibe, muss ich also wchar_t verwenden und mich mit dem L herumplagen(?)

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

10

31.05.2006, 09:44

unicode = wchar_t
hat Platz für etwa 65000 Zeichen, Umlaute sind auch dabei ;)
aber ja, das L musste mitschlörren, gewöhnt man sich aber ruck zuck dran.

Werbeanzeige