Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
launchee Mini JLI'ler
Alter: 52 Anmeldedatum: 24.10.2006 Beiträge: 4 Wohnort: Chiemgau Medaillen: Keine
|
Verfasst am: 24.10.2006, 18:01 Titel: Fehler beim Erstellen mit VS 2005 EE |
|
|
Hallo.
Hab Probleme beim Kompilieren bzw Erstellen des D3DDrawText.cpp (Kapitel 19). Habe in den Includeverzeichnissen Platform SDK und DirectX-SDK richtig angegeben, zusätzlich für dieses Projekt folgende Libraries: dxguid.lib, d3d9.lib, d3dx9.lib
Denoch bekomme ich beim Erstellen mit Visual C++ 2005 Express Edition folgende Fehlermeldung:
Kompilieren...
1>D3DDrawText.cpp
1>... \d3ddrawtext.cpp(4 : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [36]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
[Anmerkung: Diese Meldung kommt jeweils bei den nachfolgenden Fehlern nochmals auf]
1>...\d3ddrawtext.cpp(94) : error C2440: 'Initialisierung': 'const char [12]' kann nicht in 'LPCWSTR' konvertiert werden
1>...\d3ddrawtext.cpp(111) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [12]' in 'LPCWSTR' nicht möglich
1>...\d3ddrawtext.cpp(167) : error C2664: 'ID3DXFont::DrawTextW': Konvertierung des Parameters 2 von 'const char [15]' in 'LPCWSTR' nicht möglich
1>...\d3ddrawtext.cpp(175) : error C2664: 'ID3DXFont::DrawTextW': Konvertierung des Parameters 2 von 'const char [15]' in 'LPCWSTR' nicht möglich
1>...\d3ddrawtext.cpp(239) : error C2664: 'strcpy': Konvertierung des Parameters 1 von 'WCHAR [32]' in 'char *' nicht möglich
1>Das Buildprotokoll wurde unter "...\directx_kap19\directx_kap19\Debug\BuildLog.htm" gespeichert.
1>directx_kap19 - 6 Fehler, 0 Warnung(en)
Was hat es damit auf sich? Kann mir jemand bitte helfen ???
Vielen Dank, Ciao, Kai |
|
Nach oben |
|
|
Maxim Senior JLI'ler
Anmeldedatum: 28.03.2004 Beiträge: 249
Medaillen: Keine
|
Verfasst am: 24.10.2006, 18:18 Titel: |
|
|
Hallo
Du kompilierst das Projekt als Unicode.
Du musst überall char durch wchar_t bzw. std::string durch std::wstring ersetzen und bei Übergabe von Zeichenketten muss ein 'L' davor, so:
MessageBox(L"text", ......
anstatt const char [12] schreibst du const wchar_t[12]
un so weiter.
Mfg Maxim |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 24.10.2006, 18:48 Titel: |
|
|
Noch ein Tipp (schlagt mich nicht dafür ):
Falls - aus welchen Gründen auch immer - kein Unicode verwendet werden kann/soll, man kann in den Projekteinstellungen unter "Zeichensatz" auch den Multi-Byte-Zeichensatz einstellen _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
launchee Mini JLI'ler
Alter: 52 Anmeldedatum: 24.10.2006 Beiträge: 4 Wohnort: Chiemgau Medaillen: Keine
|
Verfasst am: 24.10.2006, 18:57 Titel: |
|
|
was mich trotzdem wundert ist, dass ich die D3DDrawText.cpp aus der CD zum Buch verwende (dort sollte es wohl richtig drinstehen, oder?).
Schlagt mich bitte auch nicht für meine Frage, aber wo kann ich Unicode bzw Multi-Byte-Zeichensatz in den Projekteigenschaften (VS 2005 EE) festsetzen?
Danke für Eure Antworten
Ciao, Kai |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.10.2006, 19:03 Titel: |
|
|
alternativ gehts einfach über den Quelltext:
CPP: | #define UNICODE //unicode einschalten
#undef UNICODE //unicode ausschalten
|
Das schreibste halt in die erste Zeile deiner Quelldatei. _________________ https://jonathank.de/games/
Zuletzt bearbeitet von Jonathan_Klein am 24.10.2006, 19:07, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 24.10.2006, 19:06 Titel: |
|
|
Falls dus nicht über den Quellcode machen willst:
Im Projektmappen-Editor Recktsklick auf Projekt->Eigenschaften->Konfigurationseigenschaften->Allgemein->Projektstandards->Zeichensatz
(so gehts zumindest bei Visual Studio 2005 Standard) _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
launchee Mini JLI'ler
Alter: 52 Anmeldedatum: 24.10.2006 Beiträge: 4 Wohnort: Chiemgau Medaillen: Keine
|
Verfasst am: 24.10.2006, 19:13 Titel: |
|
|
So ist's gut
Es klappt jetzt sowohl mit der "Methode" #undef UNICODE als auch über die Konfig.eigenschaften (hab's jetzt gefunden !)
Danke vielmals für Eure netten und superschellen Antworten.
Super Forum hier
Ciao , Kai |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 24.10.2006, 19:22 Titel: |
|
|
Alternativ kannst du auch die Funktion
CPP: | ID3DXFont::DrawTextA
|
direkt aufrufen.
Wenn dein Projekt auf unicode eingestellt ist, wird die Funktion DrawText auf die Funktion DrawTextW umgeleitet. Diese nimmt nur unicode an. Ist kein unicode aktiv wird die Funktion DrawText auf die funktion DrawTextA umgeleitet welche das macht was du willst. Du kannst aber zu jeder zeit beide Funktionen direkt aufrufen |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.10.2006, 20:38 Titel: |
|
|
Ja, wobei man natürlich bedenken muss, das das ja alles Extra so ist, fals man mal schnell auf UNICODE umsteigen will. Dann braucht man nämlich die ganzen Funktionswaufrufe nicht zu ändenr, was man aber muss wenn man imemr die ...A Verison benutzt. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 25.10.2006, 05:52 Titel: |
|
|
Stimmt schon aber solange es nicht alle Funktionen für beide Varianten gibt, ist es ganz gut zu wissen, dass man direkt darauf zugreifen kann.
Wenn man so einfach umstellen könnte, hätte er ja nicht diesen Compilerfehler |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 25.10.2006, 07:33 Titel: |
|
|
Chriss hat Folgendes geschrieben: | Wenn man so einfach umstellen könnte, hätte er ja nicht diesen Compilerfehler | Deshalb soll man ja auch nicht char oder wchar_t nutzen, sondern TCHAR und das TEXT-Makro
Also statt CPP: | const char* Konstante="Test"; | oder CPP: | const wchar_t* Konstante=L"Test"; | nutzt man lieber CPP: | const TCHAR* Konstante=TEXT("Test"); | oder lieber gleich die passenden Typedefs für const TCHAR*: CPP: | LPCTSTR Konstante=TEXT("Test"); | Das wird nämlich je nach gewählten Zeichensatz richtig überführt
Siehe MSDN Handling Unicode _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 25.10.2006, 08:16 Titel: |
|
|
Chriss hat Folgendes geschrieben: |
Stimmt schon aber solange es nicht alle Funktionen für beide Varianten gibt, ist es ganz gut zu wissen, dass man direkt darauf zugreifen kann.
|
AFE-GmdG hat Folgendes geschrieben: |
Deshalb soll man ja auch nicht char oder wchar_t nutzen, sondern TCHAR und das TEXT-Makro
|
Da bringt einem TCHAR auch nicht viel. |
|
Nach oben |
|
|
|