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

Terep

Frischling

  • »Terep« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Region Hannover

  • Private Nachricht senden

1

16.02.2008, 11:32

Listing 10.1 gibt 2 Fehlermeldungen

Hi

Ich habe gerade das Listing 10.1 aus dem Buch C++ für Spieleprogrammierer abgetippt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// C++ für Spieleprogrammierer
// Listing 10.1
// Ein Windows-Grundgerüst
//
#include <windows.h>

// Prototyp der Callback-Funktion
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam);

// Hauptprogramm
//
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
                    LPSTR lpcmdline, int ncmdshow)
{
  WNDCLASSEX windowclass; // Struktur für Fenstereigenschaften
  HWND       hWnd;        // Fenster-Handle
  MSG        message;     // Nachricht

  // Der Klassen-Name des Fensters ist frei wählbar
  const char szClassName[] = "Erstes Fenster";

  // Struktur mit gewünschten Eigenschaften füllen
  //

  // Größe der Struktur zwischenspeichern
  windowclass.cbSize = sizeof (WNDCLASSEX);

  // Fenster soll beim Verschieben neu gezeichnet werden
  windowclass.style = CS_HREDRAW | CS_VREDRAW;

  // Zeiger auf Callback-Funktion
  windowclass.lpfnWndProc = WindowProc;

  // Keine erweiterten Einstellungen
  windowclass.cbClsExtra = 0;
  windowclass.cbWndExtra = 0;

  // Instanz speichern
  windowclass.hInstance = hInst;

  // Icons und Cursor festlegen
  windowclass.hIcon   = LoadIcon (NULL, IDI_APPLICATION);
  windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);

  // Hintergrundfarbe festlegen
  windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;

  // Ein Menü brauchen wir nicht
  windowclass.lpszMenuName = NULL;

  // Klassenname angeben
  windowclass.lpszClassName = szClassName;

  // Fensterklasse registrieren
  if (!RegisterClassEx (&windowclass) )
    return (0);

  // Das Fenster erzeugen
  hWnd = CreateWindowEx (NULL,
                         szClassName,
                         "Das erste Fenster!",
                         WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                         100, 100,
                         300, 250,
                         NULL,
                         NULL,
                         hInst,
                         NULL);

  // Prüfen, ob alles glatt ging
  if (hWnd == NULL)
    return (0);

  // Der "Herzschlag" des Programms.
  // Hier werden alle Nachrichten abgeholt,
  // übersetzt und weitergeleitet.
  while (GetMessage (&message, NULL, 0, 0) )
  {
    TranslateMessage (&message);
    DispatchMessage (&message);

  }

  // Programm beenden
  return (int)(message.wParam);

} // WinMain


// Callback-Funktion zur Nachrichtenverarbeitung
//
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
                             WPARAM wParam, LPARAM lParam)
{
  // Messages auswerten
  switch (message)
  {
    // Fenster schließen? (Auch Alt-F4)
    case WM_DESTROY:
    {
      // Nachricht zum Beenden schicken
      PostQuitMessage (0);
      return (0);

    }

    // Wurde eine Taste gedrückt?
    case WM_KEYDOWN:
    {
      // Ja, also je nach Taste verzweigen
      switch (wParam)
      {
        // Wurde "Escape" gedrückt?
        case VK_ESCAPE:
        {
          // Ja, also Nachricht zum Beenden schicken
          PostQuitMessage (0);
          return (0);

        }
      }
    } break;
  } 
  // Die Nachricht wurde nicht von uns verarbeitet, also
  // von Windows verarbeiten lassen.
  return (DefWindowProc (hWnd, message, wParam, lParam) );

} // WindowProc



Es kommen 2 Fehler:

Fehler 1 error C2440: '=': 'const char [15]' kann nicht in 'LPCWSTR' konvertiert werden c:\dokumente…

Fehler 2 error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [15]' in 'LPCWSTR' nicht möglich c:\dokumente...


Lade ich den Quellcode aus der Begleit-CD hoch, gibt es keine Fehlermeldung, aber den Hinweis:
Das Projekt "10_1.dsp" muss in das aktuelle Visual C++-Format konvertiert werden. Nach dem Konvertieren können Sie dieses Projekt nicht mehr in früheren Versionen von Visual Studio bearbeiten.
Soll das Projekt konvertiert und geöffnet werden?

Dies beantworte ich mit ja. Das Programm läuft dann ohne Fehlermeldung.


Da ich im Vergleich mit meinem eingetippten Code keinen Tippfehler gefunden habe, habe ich den Quellcode aus der Buch-CD kopiert, ein neues Projekt angelegt und den Quellcode eingefügt. Dann erscheint die gleiche Fehlermeldung wie oben.

Ich benutze Microsoft Visual Studio 2005 Academic Edition.

Habe versucht im Subforum einen Vergleichsfall zu finden. Ohne Erfolg, liegt wohl auch daran, dass ich nicht das große Backround-Wissen habe, um eine ähnliche Situation als solche zu erkennen.

Was kann ich tun, damit ich im Buch weiterarbeiten kann. Ich tippe grundsätzlich alle Listings ab, wenn aber das System falsch eingestellt ist, wird wohl nur noch Frust rauskommen.
Wäre schön, wenn Ihr mir helfen könnt!

Terep
Avatar = „Odyssee im Weltraum“
Film von Stanley Kubrick (Warner Brothers)
nach dem Buch von Arthur C. Clarke.
It will becoming true ?!!

Terep

Frischling

  • »Terep« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Region Hannover

  • Private Nachricht senden

3

16.02.2008, 12:02

Ich hatte vorher schon im Forum gesucht. Leider ohne Erfolg!
Stichwort "Unicode" gibt Massen raus. Wenn ich das alles durcharbeiten soll, kaufe ich mir eher ein anderes Buch.
Geht es nicht etwas konkreter mit der Antwort, es wäre schön.

Terep
Avatar = „Odyssee im Weltraum“
Film von Stanley Kubrick (Warner Brothers)
nach dem Buch von Arthur C. Clarke.
It will becoming true ?!!

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

Terep

Frischling

  • »Terep« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Region Hannover

  • Private Nachricht senden

5

16.02.2008, 12:11

Ich verstehe nicht, was Unicode (Sonderzeichen) mit meinem Problem zu tun haben. Lt. Beschreibung wird hier nur ein Fenster generiert. Der Text: "Das erste Fenster!" Wo ist da Unicode?
Nehme ich die Textinhalte raus, bleiben die Fehler trotzdem.

Terep
Avatar = „Odyssee im Weltraum“
Film von Stanley Kubrick (Warner Brothers)
nach dem Buch von Arthur C. Clarke.
It will becoming true ?!!

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

6

16.02.2008, 12:14

Mach doch mal das, was das FAQ rät, und schreib um alle deine Strings die du in den Quellcode hackst ein TEXT(). Also TEXT("Mein erstes Fenster"). Alternativ L"Mein erstes Fenster", dann legst du dich aber auf Unicode fest.

Terep

Frischling

  • »Terep« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Region Hannover

  • Private Nachricht senden

7

16.02.2008, 13:54

Ich habe heute das erste (!) Nichtkonsolenprogramm nach exakter Buch-Vorgabe in Kapitel 10 eingetippt. Offensichtlich ist der Code aus Sicht von Visual Studio 2005 veraltert. Siehe obige Meldung.
Ich möchte gerne wissen, wo im Quellcode was veraltert ist oder was ich an meinem System generell einstellen muss, um mit diesem Buch weiterarbeiten zu können. Bleiben die Antworten von Dir so, dass man erst die Materie verstehen muss um sich selbst zu helfen, werde ich mir wohl doch lieber ein anderes aktuelleres Buch kaufen.

Nichts gegen Deine Antworten „Das Gurke“.; Du willst mich zum eigenständigen Suchen bringen, aber ich habe einfach zuviel Defizite um das tun so können.

Hoffentlich wird noch jemand anders antworten; einfach und klar, damit ich es verstehen kann. OK?

Terep
Avatar = „Odyssee im Weltraum“
Film von Stanley Kubrick (Warner Brothers)
nach dem Buch von Arthur C. Clarke.
It will becoming true ?!!

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

8

16.02.2008, 13:56

Zitat von »"Das Gurke"«

Mach doch mal das, was das FAQ rät, und schreib um alle deine Strings die du in den Quellcode hackst ein TEXT(). Also TEXT("Mein erstes Fenster"). Alternativ L"Mein erstes Fenster", dann legst du dich aber auf Unicode fest.
Gehts noch eindeutiger? Dann weiss ich nicht, was du meinst Oo

Terep

Frischling

  • »Terep« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Region Hannover

  • Private Nachricht senden

9

16.02.2008, 14:09

Hallo „Das Gurke“.;
Noch einmal, wenn es aus der Begleit-CD von Visual Studio überarbeitet wird, läuft das Programm. Es läuft nicht, wenn ich den Quellcode nach Vorgaben aus dem Buch (!) eintippe. Wenn mir niemand erklären kann, warum es nicht funktioniert und was ich konkret tun kann, um diesen Zustand zu ändern, breche ich mit diesem Buch ab.
In einem Buch, in dem die eingetippten Quellcodes nicht funktionieren, kann ich nicht arbeiten. Da Du so gut Bescheid weist, Kannst Du mir ein Einsteigerbuch C++ empfehlen?

Terep
Avatar = „Odyssee im Weltraum“
Film von Stanley Kubrick (Warner Brothers)
nach dem Buch von Arthur C. Clarke.
It will becoming true ?!!

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

10

16.02.2008, 14:19

Das ganze "Problem" ist e i n w a n d f r e i im FAQ Thread erklärt. Sogar mit dem Hinweis, dass man die standardmäßige Unicodeunterstützung abschalten kann und einer Anleitung (!!) dazu.

Zitat

Zuerst will ich erwähnen, dass man Unicode beliebig in seinem Programm ein oder ausschalten kann. Das geht folgendermaßen:
Man geht auf Projekt/Eigenschaften/Konfigurationseigenschaften/Allgemein und wählt im Feld Zeichensatz entwerde Unicode oder Multi-Byte aus.

Man kann zwar alle Probleme mit Unicode aus der Welt schaffen, indem man Unicode einfach ausschaltet. Das das keine gute Lösung ist, kann man am besten anhand eines Beispiels erläutern: [...]
Tu dir den Gefallen und lies den Thread wirklich durch. Das Thema ist *nicht* unglaublich schwer zu begreifen und sogar einleuchtend. Der Umgang damit steht dann auf einem anderen Blatt, aber für Anfänger reicht das TEXT() Makro oder, was ich nicht tun würde, das deaktivieren von Unicode aus.

Werbeanzeige