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

wrongway

Frischling

  • »wrongway« ist der Autor dieses Themas

Beiträge: 9

Wohnort: Österreich

  • Private Nachricht senden

1

13.04.2006, 11:54

Problem mit MessageBox (Seite 112)

Hallo zusammen,

mich quält seit seit einiger zeit der das beispielprogramm von seite 112

ich hoffe mir kann geholfen werden:

C-/C++-Quelltext

1
2
MessageBox(NULL,"Fehler beim Erzeugen der Direct3D-Schnittstelle!",
                    "Fehler", MB_OK | MB_ICONEXCLAMATION);


dazu folgende fehlermeldung:
error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [49]' in 'LPCWSTR' nicht möglich

das gleiche sagt er bei den anderen beiden mben auch

??? ??? [/cpp]
Ois bestens!

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

13.04.2006, 12:01

Du musst die char-strings durch Unicode-strings ersetzen.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

3

13.04.2006, 12:08

jo... falls du nicht wissen solltest wie: Schreib einfach ein L vor den String...:

C-/C++-Quelltext

1
2
MessageBoxW(NULL, L"Fehler beim Erzeugen der Direct3D-Schnittstelle!", 
                      L"Fehler", MB_OK | MB_ICONEXCLAMATION);
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Sheddex

unregistriert

4

13.04.2006, 12:11

Wenn jemand gerade Lust dazu hat kann er auch erklären was genau das "L" bringt ;p
Bei mir geht das nämlich nur so, mit dem L geht es nicht... und langsam würde mich das schonmal interessieren warum machen das "L" brauche und manche nicht... ich hab' ja eh keine Ahnung von nichts ;)

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

5

13.04.2006, 12:14

Wenn du das L vor einem String setzt ist es ein Unicode-String, ohne ein ANSI. Falls du mit "es geht auch ohne" MessageBox meinst, das ist nur eine Funktion, welche je nach einstellungen des Compilers auf MessageBoxA (für ANSI) oder MessageBoxW (für Unicode) "verzweigt"!
Deshalb würde ich immer klar schreiben: MessageBoxW oder MessageBoxA... und nicht nur MessageBox!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

wrongway

Frischling

  • »wrongway« ist der Autor dieses Themas

Beiträge: 9

Wohnort: Österreich

  • Private Nachricht senden

6

13.04.2006, 12:32

danke für die schnelle hilfe, das problem wär erledigt :yelclap:

ein glück, dass schon das nächste wartet :roll: :roll:
Ois bestens!

7

20.08.2006, 13:51

ähnliches problem, ich würd mir gerne die eigentschaften meines adapters ausgeben lassen(Beispielprogramm S109/110). allerdings auf unicode, das beispiel im buch scheint von ansi auszugehen. nur krieg ich das nicht so richtig gelöst.....

geht um folgenden codeschnipsel

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
        TCHAR acAdapterInfo[1024];
        swprintf(acAdapterInfo, TEXT("Adapter-ID: %d\n")
                                TEXT("Name: %s\n")
                                TEXT("Treiber: %s\n")
                                TEXT("TreiberVersion: %d"),
                                iAdapter,
                                pAdapters[iAdapter].Description,
                                pAdapters[iAdapter].Driver,
                                pAdapters[iAdapter].DriverVersion);
MessageBoxW(NULL, acAdapterInfo, TEXT("Adapter gefunden"), MB_OK | MB_ICONEXCLAMATION);


Habs jetzt schon soweit, das mein projekt fehlerfrei kompiliert wird, allerdings wird mir bei Name und Treiber anstelle der namen nur kleine vierecke ausgegeben. vermute mal, da kommt windows etwas ins schleudern was meinen zeichnsatz angeht.

was ist daran so falsch?

danke für tipps.

8

20.08.2006, 14:31

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
TCHAR acAdapterInfo[1024]; 
        sntprintf(acAdapterInfo, 1024, TEXT("Adapter-ID: %d\n") 
                                TEXT("Name: %s\n") 
                                TEXT("Treiber: %s\n") 
                                TEXT("TreiberVersion: %d"), 
                                iAdapter, 
                                pAdapters[iAdapter].Description, 
                                pAdapters[iAdapter].Driver, 
                                pAdapters[iAdapter].DriverVersion); 
MessageBox(NULL, acAdapterInfo, TEXT("Adapter gefunden"), MB_OK | MB_ICONEXCLAMATION);
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

9

20.08.2006, 15:20

danke, aber problem bleibt bestehen

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
        TCHAR acAdapterInfo[1024];

        _sntprintf(acAdapterInfo, 1024, TEXT("Adapter-ID: %d\n")
                                TEXT("Name: %s\n")
                                TEXT("Treiber: %s\n")
                                TEXT("TreiberVersion: %d"),
                                iAdapter,
                                pAdapters[iAdapter].Description,
                                pAdapters[iAdapter].Driver,
                                pAdapters[iAdapter].DriverVersion);
        MessageBox(NULL, acAdapterInfo, TEXT("Adapter gefunden"), MB_OK | MB_ICONEXCLAMATION);


sntprintf gabs nicht, nur _sntprintf, was aber ein makro ist und hinter dem sich _snwprintf versteckt.

hier mal die ausgabe: http://i105.photobucket.com/albums/m239/…er/ad18eeb7.jpg

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

04.10.2006, 00:00

Bei mir funktioniert irgendwie nichts so wie ich es will. Das Problem mit der MessageBox hatte ich auch. Habe es mit MessageBoxW und L vor dem string versucht und aus dem char ein tchar_s gemacht und auch unicode abgeschaltet für die ANSI Version.Aber das hat nicht geholfen. Genau das Problem wie hier schon weiter oben besprochen wurde. Habe das Programm dann so umgeschrieben das es einen Logbucheintrag macht und keine MessageBox ausgibt. Jetzt bin ich bei Listing 2.55 und habe die gleichen Probleme. Aber im Code von Davids Dateien. Habe bis jetzt nur Includes in der main.cpp Fehler sind:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
InitWindow.cpp
d:\programmieren\tribase\include\dshowbaseclasses\wxutil.h(195) : warning C4312: 'Typumwandlung': Konvertierung von 'LONG' in größeren Typ 'PVOID'
d:\programmieren\tribase\include\tbgui.h(288) : warning C4267: '=': Konvertierung von 'size_t' nach 'int', Datenverlust möglich
c:\dokumente und einstellungen\quel_thuzad\eigene dateien\visual studio 2005\projects\prog4\initwindow.cpp(23) : error C2440: 'Initialisierung': 'const char [16]' kann nicht in 'LPCWSTR' konvertiert werden
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
c:\dokumente und einstellungen\quel_thuzad\eigene dateien\visual studio 2005\projects\prog4\initwindow.cpp(50) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [16]' in 'LPCWSTR' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
c:\dokumente und einstellungen\quel_thuzad\eigene dateien\visual studio 2005\projects\prog4\initwindow.cpp(67) : error C2664: 'UnregisterClassW': Konvertierung des Parameters 1 von 'const char [16]' in 'LPCWSTR' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
main.cpp
d:\programmieren\tribase\include\dshowbaseclasses\wxutil.h(195) : warning C4312: 'Typumwandlung': Konvertierung von 'LONG' in größeren Typ 'PVOID'
d:\programmieren\tribase\include\tbgui.h(288) : warning C4267: '=': Konvertierung von 'size_t' nach 'int', Datenverlust möglich
Code wird generiert...
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige