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

21

07.08.2006, 18:59

Also ich hab keine Ahnung was ich falsch mache. Ich hab genau den Teil ausgetauscht den ihr gesagt habt und trotzdem habe ich die Fehlermeldung

Fehler 1 error C2664: 'CreateWindowExW': Konvertierung des Parameters 3 von 'const char [13]' in 'LPCWSTR' nicht möglich

Hier nochmal das Listing das ich von der Buch-CD geladen und mit eurer Hilfe korrigiert habe. Ich habe die Stelle an der der Compiler meckert mal makiert :

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
131
132
// C++ für Spieleprogrammierer
// Listing 10.1
// Ein Windows-Grundgerüst
//
#include <windows.h>
#include <tchar.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 TCHAR szClassName[] = _T("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,
                         "Mein Fenster",                        <------ FEHLER !?!?!?!?!
                         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

flux

Treue Seele

  • Private Nachricht senden

22

07.08.2006, 19:04

Was LPCWSTR bedeutet weisst du doch schon. Dann wende doch einfach mal diese Erkenntnis auf deinen aktuellen Fehler an

Zitat von »"VeilOfOblivion"«


LPCWSTR szClassName = L"Erstes Fenster";

23

07.08.2006, 19:08

Das hatte ich doch als erstes getestet (s. mein erstes Posting hier). Trotzdem kommt der Fehler. Dann der Hinweis mit dem TCHAR und wieder der gleiche Fehler...

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

24

07.08.2006, 19:09

1.) tchar find ich ned so gut, entweder man benutzt char oder wchar_t. Muss aber jeder selbst wissen
2.) Bei Unicode musst du auch ein #define UNICODE vor der windows.h includen, falls du das nicht bereits bei den Präprozessoreinstellungen tust.
3.) Bei Unicode muss vor jeden String ein L => Long => 16Bit Variable pro Zeichen.

C-/C++-Quelltext

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
131
132
133
134
135
// C++ für Spieleprogrammierer

// Listing 10.1

// Ein Windows-Grundgerüst

//

#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <tchar.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 TCHAR szClassName[] = L"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,
                         L"Mein Fenster",                        <------ Wo bleibt hier das _T bei tchar? 
                         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

25

07.08.2006, 19:20

Wenn du mir jetzt noch verrätst wie ich dein Kommentar in der "CreateWindowEx" umsetzen kann ? Wie und wo wird dieses ominöse _T eingesetzt...und vor allem wo steht das denn im Buch ???? :-)

Sorry wenn ich mich blöd anstellen sollte... ;-)

Und... wenn wir schonmal dabei sind... könnt ihr mir mal genau erklären (oder sagen wo ich dazu was finde) was TCHAR und LPCWSTR ist ? In der VS-HIlfe finde ich dazu leider nix... oder ich bin zu blöd zum suchen :-)

Anonymous

unregistriert

26

07.08.2006, 19:41

Zitat von »"VeilOfOblivion"«

oder ich bin zu blöd zum suchen :-)


http://spieleprogrammierer.de/phpBB2/search.php
http://www.live.com/
http://www.google.de/

27

07.08.2006, 20:44

Sehr hilfreich... :-/
und so produktiv...

Anonymous

unregistriert

28

07.08.2006, 20:52

Wer suchet der findet...

Schreib doch mal TCHAR und LPCWSTR in deinen Code und halt deine Maus
drauf...

29

07.08.2006, 21:08

Schön... und jetzt weiß ich das TCHAR ein Typedef (=Synonym) von WCHAR ist... was wiederum ein typedef von wchar_t ist...
und LPCWSTR ein Zeiger auf ein WCHAR...


Und jetzt ? Mein Code funzt immer noch nicht... ;-)

Sag doch einfach mal die lösung. Dann kann ich mir darüber Gedanken machen wieso es so sein muß und wieso es so wie es jetzt ist nicht funktioniert...

30

07.08.2006, 21:12

Ach ja... und wenn ich

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
...
hWnd = CreateWindowExW (NULL,
                         szClassName,
                         _T("Fenstertitel"),
                         WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                         100, 100,
                         300, 250,
                         NULL,
                         NULL,
                         hInst,
                         NULL);
...


schreibe kommen 10 Linker-Fehlermeldungen ... die ersten 9 lauten

Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__DispatchMessageW@4" in Funktion "_WinMain@16". win.obj

mit diversen anderen externen Symbolen...

und der 10.

Fehler 10 fatal error LNK1120: 9 nicht aufgelöste externe Verweise.

...

Werbeanzeige