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

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

11

02.12.2007, 20:46

autsch, wie peinlich^^
das kommt davon, wenn man ständig nur mit C++ Mitteln arbeitet, und dann mitreden will wenn man meint es ginge um C Funktionen obwohl es eigentlich um WinAPI geht :shock:

12

03.12.2007, 10:39

Zitat


------ Build started: Project: 3D Programme, Configuration: Debug Win32 ------
1>Compiling...
1>cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release
1>main.cpp
1>c:\2005 express projekte\3d programme\3d programme\main.cpp(17) : error C2664: 'MessageBoxA' : cannot convert parameter 2 from 'const wchar_t [49]' to 'LPCSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\2005 express projekte\3d programme\3d programme\main.cpp(34) : error C2664: 'MessageBoxA' : cannot convert parameter 2 from 'const wchar_t [53]' to 'LPCSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\2005 express projekte\3d programme\3d programme\main.cpp(54) : error C2664: 'MessageBoxA' : cannot convert parameter 3 from 'const wchar_t [17]' to 'LPCSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\2005 express projekte\3d programme\3d programme\main.cpp(85) : error C2664: 'MessageBoxA' : cannot convert parameter 3 from 'const wchar_t [28]' to 'LPCSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>Build log was saved at "file://c:\2005 Express Projekte\3D Programme\3D Programme\Debug\BuildLog.htm"
1>3D Programme - 4 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


schau es dir doch an, so schwer ist es ja nicht.

Zitat

1>cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release

das ist die warnung, die dir sagt, dass die option Wp64 abgelehnt wurde und bei entfernt wird bei künftigen releases.

Zitat

'MessageBoxA' : cannot convert parameter 3 from 'const wchar_t [28]' to 'LPCSTR'

'MessageBoxA' : cannot convert parameter 2 from 'const wchar_t [28]' to 'LPCSTR'

das sind deine fehler, d.h. dass dein zweiter bzw. dritter parameter an die funktion MessageBoxA nicht die richtigen typen besitzen. du übergibst ihnen einen const wchar_t, sie wollen jedoch ein LPCSTR.

jetzt kannst du dir das zeugs von den guten leuten hier durchlesen, wobei ich bezweifel, dass du das dann super verstehen wirst, oder einfach bischen googeln und informieren.

oder die funktion MessageBoxA markieren und F1 drücken :)

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

13

03.12.2007, 17:17

Zitat von »"Draculark"«


jetzt kannst du dir das zeugs von den guten leuten hier durchlesen, wobei ich bezweifel, dass du das dann super verstehen wirst, oder einfach bischen googeln und informieren.

oder die funktion MessageBoxA markieren und F1 drücken :)

Oder es ganz einfach so machen wie ich gesagt habe, denn wchar_t ist der Datentyp für UNICODE-Zeichen und LPCSTR ein ASCII-String. Wenn du wie bereits oben erwähnt die L 's vor den Strings entfern würdest, die aus diesen UNICODE-Strings machen, dann hast du all deine Probleme gelöst.

Zitat von »"grek40"«

autsch, wie peinlich^^
das kommt davon, wenn man ständig nur mit C++ Mitteln arbeitet, und dann mitreden will wenn man meint es ginge um C Funktionen obwohl es eigentlich um WinAPI geht :shock:


Das kann ich nur zurück geben, den ich rede (naja eigentlich schreibe) die ganze Zeit nur über WinAPI-Funktionen. Das einzige peinliche ist dein Beitrag, der übrigens auch noch vom Thema ablenkt.
Signaturen werden überbewertet

Nico

Frischling

Beiträge: 82

Wohnort: Nürnberg

  • Private Nachricht senden

14

04.12.2007, 08:06

Du kannst auch folgendes machen, um in Zukunft solche Fehler zu umgehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
#ifdef _UNICODE
typedef std::basic_string<wchar_t> myString
#define _T(x)  L ## x
#else
typedef std::basic_string<char> myString
#define _T(x) x
#endif /* _UNICODE */


Was macht das?
Das definiert eine C++-String-Klasse abhängig von deinen Projekteinstellungen und definiert das Makro _T() das automatisch im Unicode-Modus das L vor deine Strings setzt. Im Multibyte-Modus tut es das nicht.
Vorteil: Du kannst so gut wie alle String-Operationen ausführen, ohne eben versch. Funktionen wie wsprintf etc zu verwenden, da du mit der normalen String-Klasse arbeiten kannst. Dank der Standard-Methode .c_str() kannst du das auch an Funktionen wie MessageBox() übergeben.

Generell solltest du aber lernen mit Fehlern und Warnungen umzugehen. Denn sonst wird Dir das Programmieren in Zukunft wenig Spaß machen. Also: Lesen, Code an der Stelle ankucken und überlegen :).
lg

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

15

04.12.2007, 16:40

Zitat von »"Nico"«

Du kannst auch folgendes machen, um in Zukunft solche Fehler zu umgehen:

Code (C++):

#ifdef _UNICODE
typedef std::basic_string<wchar_t> myString
#define _T(x) L ## x
#else
typedef std::basic_string<char> myString
#define _T(x) x
#endif /* _UNICODE */



Was macht das?
Das definiert eine C++-String-Klasse abhängig von deinen Projekteinstellungen und definiert das Makro _T() das automatisch im Unicode-Modus das L vor deine Strings setzt. Im Multibyte-Modus tut es das nicht.
Vorteil: Du kannst so gut wie alle String-Operationen ausführen, ohne eben versch. Funktionen wie wsprintf etc zu verwenden, da du mit der normalen String-Klasse arbeiten kannst. Dank der Standard-Methode .c_str() kannst du das auch an Funktionen wie MessageBox() übergeben.

Generell solltest du aber lernen mit Fehlern und Warnungen umzugehen. Denn sonst wird Dir das Programmieren in Zukunft wenig Spaß machen. Also: Lesen, Code an der Stelle ankucken und überlegen .
lg

Eigentlich unnötig, weil du einfach das Makro TEXT("DeinText") benutzen kannst, dass in windef.h definiert ist und das selbe macht. ;)
Signaturen werden überbewertet

Nico

Frischling

Beiträge: 82

Wohnort: Nürnberg

  • Private Nachricht senden

16

04.12.2007, 17:02

Klar, wirklich nötg isses nicht.
#define _T(x) TEXT(x)
Geht auch.^^ Aber du brauchst die TCHAR.h nicht einbinden und es ist kürzer als TEXT. :D
lg

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

17

05.12.2007, 15:01

Zitat von »"Nico"«


Geht auch.^^ Aber du brauchst die TCHAR.h nicht einbinden und es ist kürzer als TEXT. :D

um das Makro TEXT() benutzen zu können muss man TCHAR.h nicht einbinden.
Signaturen werden überbewertet

Nico

Frischling

Beiträge: 82

Wohnort: Nürnberg

  • Private Nachricht senden

18

05.12.2007, 15:04

Zitat von »"GR-PA"«

Zitat von »"Nico"«


Geht auch.^^ Aber du brauchst die TCHAR.h nicht einbinden und es ist kürzer als TEXT. :D

um das Makro TEXT() benutzen zu können muss man TCHAR.h nicht einbinden.


Hab ich auch nie behauptet.....

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

19

05.12.2007, 15:50

Zitat von »"Nico"«

Zitat von »"GR-PA"«

Zitat von »"Nico"«


Geht auch.^^ Aber du brauchst die TCHAR.h nicht einbinden und es ist kürzer als TEXT. :D

um das Makro TEXT() benutzen zu können muss man TCHAR.h nicht einbinden.


Hab ich auch nie behauptet.....

Und was wolltest du mit dem einbinden von TCHAR.h sagen? ;)
Signaturen werden überbewertet

Nico

Frischling

Beiträge: 82

Wohnort: Nürnberg

  • Private Nachricht senden

20

05.12.2007, 16:07

Dass man mit Hilfe dieses Makros _T() benutzen kann, ohne die TCHAR.h einzubinden weils kürzer ist, oder mit der Lösung davor so ein Makro ganz ohne Header zur Verfügung hat und das nennen kann wie man will...

Werbeanzeige