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

Anonymous

unregistriert

1

20.02.2005, 23:15

Probleme mit Komplimierung und DevC++

Hallo,

ich habe ein Problem mit DevC++, die damit verbundenen Libs und der daraus folgenden Komplimierung.
Eigentlich wollte ich ein Programm schreiben, was mir ein Bild in das Windows Fenster lädt als Hintergrund. Das Windows Fenster zu schreiben und anzeigen lief perfekt, aber dann wollte ich ein Hintergrundsbild reinladen. Das wollte nicht funktionen. Als ich schließlich dann probierte eine runtergeladene Source zu komplimieren, wollte diese auch nicht.

U.a. gab es Linker Error mit folgenden Inhalt:

[Linker error] undefined reference to `CSoundManager::CSoundManager()'

[Linker error] undefined reference to `CSoundManager::CSoundManager()'

Ich habe die File "ddutil.h" eingebunden, ohne die die das ganze nicht läuft. Jetzt habe ich irgendwie das Gefühl, dass das ganze mit der DirectX SDK bzw. Windows SDK zusammenhängt, die ich installiere habe.
Jetzt wollte ich wissen, wie eigentlich diese Verzeichnisse auszusehen haben unter DevC++, damit alles richtig läuft:

Programmdateien:
C:\Dev-Cpp\Bin
C:\Dev-Cpp\lib\gcc-lib\mingw32\3.3.1
D:\Software\DXSDK\Bin
D:\Software\WinSDK\Bin

Bibliotheken:
C:\Dev-Cpp\lib
D:\Software\DXSDK\Lib
D:\Software\WinSDK\Lib

C - Includes:
C:\Dev-Cpp\include
D:\Software\DXSDK\Include
D:\Software\WinSDK\include

C++ - Includes:
C:\Dev-Cpp\include\c++\3.3.1
C:\Dev-Cpp\include\c++\3.3.1\mingw32
C:\Dev-Cpp\include\c++\3.3.1\backward
C:\Dev-Cpp\lib\gcc-lib\mingw32\3.3.1\include
C:\Dev-Cpp\include
D:\Software\DXSDK\Include
D:\Software\WinSDK\include

Passt das mit den Includes so?

Hier ist noch der Quellcode; vielleicht liegt da der Fehler drin.

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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# include <stdio.h>
# include <windows.h>
# include <ddraw.h>
# include <dsound.h>
# include "ddutil.h"
# include "dsutil.h"
# include "resource.h"

const int ultris_nettobreite = 360;  // Breite des Inneren des Haupfensters

const int ultris_nettohoehe  = 520;  // Hoehe des Inneren des Hauptfensters

int ultris_bruttobreite;             // Breite des gesamten Haupfensters (incl. Rahmen)

int ultris_bruttohoehe;              // Hoehe des gesamten Haupfensters (incl. Rahmen)


HINSTANCE ultris_instance;           // Instanz der Ultris Applikation

HWND ultris_window;                  // Das Hauptfenster von Ultris

HMENU ultris_menu;                   // Das Menu von Ultris


// V2 Beginn

const int sound_start   = 0; // Sound fuer neues Spiel

const int sound_dreh    = 1; // Sound bei Drehung

const int sound_move    = 2; // Sound bei rechts/links Bewegung

const int sound_down    = 3; // Sound bei Aufprall

const int sound_row1    = 4; // Sound bei Abraeumen einer Reihe

const int sound_row2    = 5; // Sound bei Abraeumen von mehreren Reihen

const int sound_ende    = 6; // Sound bei Spielende

const int sound_win     = 7; // Sound bei Eintrag in Highscore Tabelle

const int anzahl_sounds = 8; // Anzahl Sounds


char *soundfiles[anzahl_sounds] = 
    { 
    "ul_start.wav", 
    "ul_dreh.wav", 
    "ul_move.wav", 
    "ul_down.wav", 
    "ul_row1.wav", 
    "ul_row2.wav", 
    "ul_ende.wav", 
    "ul_win.wav"
    };

class sounds
    {
    private:
        CSoundManager smgr;
        CSound *snd[anzahl_sounds];
    public:
        int on;
        sounds();
        int init( HWND wnd);
        void play( int snr);
        ~sounds();
    };

sounds::sounds() 
    {
    int i;

    for( i = 0; i < anzahl_sounds; i++)
        snd[i] = 0;
    on = 1;
    }

int sounds::init( HWND wnd)
    {
    HRESULT ret;
    int i;

    ret = smgr.Initialize( wnd, DSSCL_PRIORITY, 2, 22050, 16);
    if( ret < 0)
        return ret;

    for( i = 0; i < anzahl_sounds; i++)
        {
        ret = smgr.Create( snd+i, soundfiles[i]);
        if( ret < 0)
            return ret;
        }
    return S_OK;
    }

sounds::~sounds()
    {
    int i;

    for( i = 0; i < anzahl_sounds; i++)
        {
        if( snd[i])
            delete snd[i];
        }
    }

void sounds::play( int i)
    {
    if( !on)
        return;
    if( snd[i]->IsSoundPlaying())
        {
        snd[i]->Stop();
        snd[i]->Reset();
        }
    snd[i]->Play(0,0);
    }

sounds ultris_sounds;
// V2 Ende




/*
** ultris_windowhandler
*/
LRESULT CALLBACK ultris_windowhandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
        {
    case WM_COMMAND:
        switch( LOWORD( wParam))
            {
        case IDM_EXIT:
            PostMessage( hWnd, WM_CLOSE, 0, 0);
            return 0;
// V2 Beginn

        case ID_ULTRIS_SOUND:
            ultris_sounds.on = !ultris_sounds.on;
            CheckMenuItem( ultris_menu, ID_ULTRIS_SOUND, ultris_sounds.on ? MF_CHECKED:MF_UNCHECKED);
            return 0;
        case IDM_TEST: // Testcode

            static int testno = 0;
            ultris_sounds.play( testno % anzahl_sounds);
            testno++;
            return 0;
// V2 Ende

            }
        break;
    case WM_GETMINMAXINFO:
        ((MINMAXINFO *)lParam)->ptMinTrackSize.x = ((MINMAXINFO *)lParam)->ptMaxTrackSize.x = ultris_bruttobreite;
        ((MINMAXINFO *)lParam)->ptMinTrackSize.y = ((MINMAXINFO *)lParam)->ptMaxTrackSize.y = ultris_bruttohoehe;
        return 0;
    case WM_DESTROY:
        PostQuitMessage( 0);
        return 0;
        }
    return DefWindowProc(hWnd, msg, wParam, lParam);
    }

/*
** WinMain
*/
int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int nCmdShow)
    {
    MSG msg;
    HACCEL acc;
    WNDCLASSEX wcx;

    ultris_instance = hInst;

    wcx.cbSize        = sizeof( wcx);
    wcx.lpszClassName = TEXT( "Ultris");
    wcx.lpfnWndProc   = ultris_windowhandler;
    wcx.style         = CS_VREDRAW | CS_HREDRAW;
    wcx.hInstance     = hInst;
    wcx.hIcon         = LoadIcon( hInst, MAKEINTRESOURCE( IDI_MAIN));
    wcx.hIconSm       = LoadIcon( hInst, MAKEINTRESOURCE( IDI_MAIN));
    wcx.hCursor       = LoadCursor( NULL, IDC_ARROW);
    wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wcx.lpszMenuName  = MAKEINTRESOURCE( IDR_MENU);
    wcx.cbClsExtra    = 0;
    wcx.cbWndExtra    = 0;

    if( !RegisterClassEx( &wcx))
        return 0;

    acc = LoadAccelerators( hInst, MAKEINTRESOURCE(IDR_ACCEL));

    ultris_bruttohoehe = ultris_nettohoehe + 2*GetSystemMetrics( SM_CYSIZEFRAME) 
                                           + GetSystemMetrics( SM_CYMENU)
                                           + GetSystemMetrics( SM_CYCAPTION);
    ultris_bruttobreite = ultris_nettobreite + 2*GetSystemMetrics( SM_CXSIZEFRAME);

    ultris_window = CreateWindowEx( 0, TEXT( "Ultris"), TEXT( "Ultris"), WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, 
                                                   CW_USEDEFAULT, CW_USEDEFAULT,
                                                   ultris_bruttobreite, ultris_bruttohoehe, NULL, NULL, hInst, NULL);
    if( !ultris_window)
        return 0;

    ultris_menu = GetMenu( ultris_window);

// V2 Beginn

    if( ultris_sounds.init( ultris_window) < 0)
        {
        MessageBox( ultris_window, "Fehler beim Initialisieren der Sounds", "Ultris-Fehlermeldung", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
        return 0;
        }
    CheckMenuItem( ultris_menu, ID_ULTRIS_SOUND, ultris_sounds.on ? MF_CHECKED:MF_UNCHECKED);
// V2 Ende


    MoveWindow( ultris_window, (GetSystemMetrics(SM_CXSCREEN)-ultris_bruttobreite)/2,
                               (GetSystemMetrics(SM_CYSCREEN)-ultris_bruttohoehe)/2, 
                                                                    ultris_bruttobreite, ultris_bruttohoehe, TRUE);

    ShowWindow( ultris_window, nCmdShow);

    while( TRUE)
        {
        if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE))
            {
            if( GetMessage( &msg, NULL, 0, 0 ) == 0)
                return 0; // Message ist WM_QUIT


             if( TranslateAccelerator( ultris_window, acc, &msg) == 0)
                {
                TranslateMessage( &msg); 
                DispatchMessage( &msg);
                }
            }
        else
            {
            // Hier koennen wir uns um das Spiel kuemmern

            }
        }
    }

Anonymous

unregistriert

2

27.02.2005, 17:15

Ich fürchte du bist auf dem Holzweg, nicht dein Code ist falsch, sondern dein DirectX SDK.
Du musst dir eins mit angepassten Libarys laden, get unter DevCpp einfach unter:
->Werkzeuge ->auf Updates/Packete prüfen
und wähle dann DirectX aus.

MfG RoaN;