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

28.08.2004, 15:02

Fehlersuche die 1.

hallo Leute,
ich bin grad dabei eine GameShell zu schreiben...
und ich häng im Moment ein bissl - das is sicher irgendein ganz simpler Fehler den ich nicht seh (liegt sicher daran da ich nicht viel geschlafen hab :sleep: )
ich hoffe ihr könnt mir helfen :rolleyes:

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
#define WINDOW_CLASS_NAME "Test 1"
#define WIN32_LEAN_AND_MEAN
#define KEYDOWN(vk_code) ((GetAsyncKeyState((vk_code)&0x8000)?1:0)
#define KEYUP(vk_code) ((GetAsyncKeyState((vk_code)&0x8000)?0:1)

#include <windows.h>

int Width = 800;
int Height = 600;

void Start(void);
void Main(void);
void Exit(void);

HWND main_window_handle = 0;
HINSTANCE hinstance_app = 0;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    switch(msg)
    {
    
    case WM_CREATE:
    {
        return(0);
    }
    break;

    case WM_PAINT:
    {
        hdc = BeginPaint(hwnd, &ps);
        EndPaint(hwnd, &ps);
        return(0);
    }
    break;

    case WM_DESTROY:
    {
        PostQuitMessage(0);
        return(0);
    }
    break;

    default:
    break;
    }
    return (DefWindowProc(hwnd, msg, wparam, lparam));
}


int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)
{
    WNDCLASSEX winclass;
    HWND hwnd;
    MSG msg;

    winclass.cbSize = sizeof(WNDCLASSEX);
    winclass.style = CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc = WindowProc;
    winclass.cbClsExtra = 0;
    winclass.cbWndExtra = 0;
    winclass.hInstance = hinstance;
    winclass.hIcon = LoadIcon(0, IDI_APPLICATION);
    winclass.hCursor = LoadCursor(0, IDC_ARROW);
    winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName = 0;

    winclass.lpszClassName = "Engine 1";
    winclass.hIconSm = LoadIcon(0, IDI_APPLICATION);

    hinstance_app = hinstance;

    if(!RegisterClassEx(&winclass))
    {
        return(0);
    }
    if(!(hwnd = CreateWindowEx(0, WINDOW_CLASS_NAME, "Test 1", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, Width, Height, 0, 0, hinstance, 0)))
    {
        return(0);
        main_window_handle = hwnd;

        Start();

        while(TRUE)
        {
            if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
            {
                if(msg.message == WM_QUIT)
                {
                    break;
                }

                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }

            Main();
        }

        Exit();
        return(msg.wParam);
    }
}

void Start(void)
{
}

void Main(void)
{
    if(KEYDOWN(VK_ESCAPE))
    {
        SendMessage(main_window_handle, WM_CLOSE, 0, 0);
    }
}

void Exit(void)
{
}


mfg Triac

2

28.08.2004, 16:04

ich hab jetz einmal die start, main und exit Funktionen weglassen ebenso wie das mit der Escape-Taste...

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
#define WINDOW_CLASS_NAME "Test 1"
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include "functions.h"

int Width = 800;
int Height = 600;

HWND main_window_handle = 0;
HINSTANCE hinstance_app = 0;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    switch(msg)
    {
    
    case WM_CREATE:
    {
        return(0);
    }
    break;

    case WM_PAINT:
    {
        hdc = BeginPaint(hwnd, &ps);
        EndPaint(hwnd, &ps);
        return(0);
    }
    break;

    case WM_DESTROY:
    {
        PostQuitMessage(0);
        return(0);
    }
    break;

    default:
    break;
    }
    return (DefWindowProc(hwnd, msg, wparam, lparam));
}


int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)
{
    WNDCLASSEX winclass;
    HWND hwnd;
    MSG msg;

    winclass.cbSize = sizeof(WNDCLASSEX);
    winclass.style = CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc = WindowProc;
    winclass.cbClsExtra = 0;
    winclass.cbWndExtra = 0;
    winclass.hInstance = hinstance;
    winclass.hIcon = LoadIcon(0, IDI_APPLICATION);
    winclass.hCursor = LoadCursor(0, IDC_ARROW);
    winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName = 0;

    winclass.lpszClassName = "Test 1";
    winclass.hIconSm = LoadIcon(0, IDI_APPLICATION);

    hinstance_app = hinstance;

    if(!RegisterClassEx(&winclass))
    {
        return(0);
    }
    if(!(hwnd = CreateWindowEx(0, WINDOW_CLASS_NAME, "Test 1", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, Width, Height, 0, 0, hinstance, 0)))
    {
        return(0);

        main_window_handle = hwnd;

        while(TRUE)
        {
            if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
            {
                if(msg.message == WM_QUIT)
                {
                    break;
                }

                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }

        }
        return(msg.wParam);
    }
}


nun bekomm ich noch Linker-Fehler ... wo liegt da das Problem ???


Linker-Vorgang läuft...
LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Debug/main.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

main.exe - 2 Fehler, 1 Warnung(en)

Anonymous

unregistriert

3

28.08.2004, 16:40

ich hab den fehler schon gefunden ... ich dürft mich da beim anlegen des projektes verklickt haben ...

mfg Triac

4

28.08.2004, 16:47

Aber Problem lag nicht an den Funktiondeklarationen sonder ich glaube an was anderem, dass du dann aber selbst verbessert hast.
Der Applikationsname war nämlich für die Fensterklasse und das Fensterobjekt unterschiedlich.

Was war den dein Linker Fehler, hattest du eine Konsolenanwendung, statt Win32 erstellt?

Anonymous

unregistriert

5

28.08.2004, 16:49

ja genau ds war der fehler ... ich hab versehentlich auf die konsolenanwendung geklickt und nicht auf die WIN32 Anwendung
jetzt geht das ganze zwar ein bissl schnell aber das werd ich auch noch hinbekommen ...

6

28.08.2004, 16:53

Dachte ich mir, den Fehler machen die Meisten.

Aber wenn es jetzt geht ist es ja Prima.

Nur als Hinweis:
Gewöhn die lieber gleich OOD an und verwende um Gotteswillen keine globalen Variablen.

Aber das musst du natürlich selbst wissen, war ja auch nur ein Hinweis!

Anonymous

unregistriert

7

28.08.2004, 16:58

mhm es geht aber ich hab da noch ein bissl was falsch gemacht ... denn er erstellt ein fenster und schließts gleich wieder...

mfg Triac

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

8

28.08.2004, 18:05

du vergisst UnregisterClass/Ex aufzurufen, bei der 9x Serie kann es deshalb schonmal vorkommen das die Klasse trotz dem beenden des Programmes weiter besteht. Bei der NT Serie ist dem nicht so, aber sollte man schon hinsetzen.

adapto

Treue Seele

Beiträge: 147

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

9

28.08.2004, 20:12

"UnregisterClass/Ex" macht nicht mal ms bei den beispielprogrammen.

Anonymous

unregistriert

10

28.08.2004, 20:34

soda ... jetz wärn vorerst einmal alle Fehler behoben
ich danke euch für die Unterstützung :)

endlich kann ich wieder beruhigt :sleep:

mfg Triac

Werbeanzeige