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

1

17.12.2006, 11:47

Ein Problem mit dem Fensterprogramm

im voraus schonmal danke :-). ich habe mir hier paar fenster threads angeschaut und habe versucht es nach den tipps aufzubauen. es kommen aber immer noch fehler und ich habe keinen plan was ich dagegn tun kann!

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
// 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

  LPCWSTR szClassName = L"Erstes Fenster";
  LPCWSTR szWindowName = L"Das erste 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,
                         szWindowName,
                         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



die fehler:

1>------ Build started: Project: Fenster, Configuration: Debug Win32 ------
1>Linking...
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__DispatchMessageW@4 referenced in function _WinMain@16
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__TranslateMessage@4 referenced in function _WinMain@16
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__GetMessageW@16 referenced in function _WinMain@16
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__CreateWindowExW@48 referenced in function _WinMain@16
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__RegisterClassExW@4 referenced in function _WinMain@16
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__LoadCursorW@8 referenced in function _WinMain@16
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__LoadIconW@8 referenced in function _WinMain@16
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__DefWindowProcW@16 referenced in function "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)
1>Fenster.obj : error LNK2019: unresolved external symbol __imp__PostQuitMessage@4 referenced in function "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:\Dokumente und Einstellungen\Annonymous\Eigene Dateien\Visual Studio 2005\Projects\Fenster\Debug\Fenster.exe : fatal error LNK1120: 10 unresolved externals
1>Build log was saved at "file://c:\Dokumente und Einstellungen\Annonymous\Eigene Dateien\Visual Studio 2005\Projects\Fenster\Fenster\Debug\BuildLog.htm"
1>Fenster - 11 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

17.12.2006, 11:56

Was für Bibliotheken hast du gelinkt?
@D13_Dreinig

3

17.12.2006, 12:10

gar keine :?, aber ich habe gerade das beispiel vom buch compiliert und da kamen auch die fehler!

habe da auch noch net so einen durchblick von bibliotheken, ich habe das mal vo einem halben jahr gemacht und da hat es klapt :).

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

17.12.2006, 12:18

Dann schau nach welche Bibliotheken gelinkt wurden (es werden automatisch welche gelinkt wenn ein Win32 Projekt erstellt wird, bei VS). Außerdem solltest du nachsehen ob sich die ganzen .lib Dateien am richtigen Ort befinden.

grüß
@D13_Dreinig

5

17.12.2006, 12:20

wo sieht man welche gelinkt wurden ?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

17.12.2006, 12:25

Meist in den Projekteinstellungen...
@D13_Dreinig

7

17.12.2006, 12:31

multi-threaded debug dll ist bei runtime lib
und sonst ist da nichts

/OUT:"C:\Dokumente und Einstellungen\Annonymous\Eigene Dateien\Visual Studio 2005\Projects\Fenster\Debug\Fenster.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\Fenster.exe.intermediate.manifest" /DEBUG /PDB:"c:\Dokumente und Einstellungen\Annonymous\Eigene Dateien\Visual Studio 2005\Projects\Fenster\debug\Fenster.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

17.12.2006, 13:10

Achje... Nochmal langsam: Projekteinstellungen->Linker->Commandline. Da müsste u.A. die user32.lib auftauchen.

grüße
@D13_Dreinig

9

17.12.2006, 14:13

danke :D, jetzt ist es nur ein fehler! die user.lib wurde nicht gelinkt bei mir

1>------ Build started: Project: Fenster, Configuration: Debug Win32 ------
1>Linking...
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:\Dokumente und Einstellungen\Annonymous\Eigene Dateien\Visual Studio 2005\Projects\Fenster\Debug\Fenster.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Dokumente und Einstellungen\Annonymous\Eigene Dateien\Visual Studio 2005\Projects\Fenster\Fenster\Debug\BuildLog.htm"
1>Fenster - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

17.12.2006, 15:06

Hast du ein Win32 Konsolen Projekt erstellt? Wenn dem so ist änder es in ein "Win32 Projekt".
@D13_Dreinig

Werbeanzeige