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

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

1

19.06.2006, 11:17

DirectDraw

tagchen leute!

hab mir (weil mir in der schule so fad war ^^) gedacht, ich schau mal ein wenig rum, und sah da ein tutorial für DirectDraw

.. also ... ein paar dinge die nicht geklappt haben, konnte ich selbst beheben...

aber ein paar probleme hab noch, wo ich nicht weiß was tun ...


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
#include <windows.h>
#include <ddraw.h>

LPDIRECTDRAW7 lpDirectDraw;
HRESULT ddrval;

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, 
                         WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WM_CLOSE :
        DestroyWindow(hwnd);
        break;

    case WM_DESTROY :
        PostQuitMessage(0);
        break;
    }

    return DefWindowProc(hwnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                   LPSTR lpCmdLine, int nShowCmd)
{
    LPCTSTR className = L"ClassName";
    WNDCLASSEX wc;

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = className;
    wc.hIconSm = LoadIcon(NULL, IDI_WINLOGO);

    if (!RegisterClassEx(&wc))
    {
        MessageBox(NULL, L"Error registering class",
            L"Error", MB_OK | MB_ICONERROR);
        return 1;
    }

    HWND hwnd = CreateWindowEx(
        0,
        className,
        L"06 - Message Loop",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        300, 300,
        NULL,
        NULL,
        hInstance,
        NULL
        );

    ddrval = DirectDrawCreateEx(NULL, (VOID**)&lpDirectDraw, IID_IDirectDraw7, NULL); 
    if (ddrval != DD_OK)
    {
        return (0);
    }    

    ddrval = lpDirectDraw->SetCooperativeLevel (hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
    if (ddrval != DD_OK)
    {
        lpDirectDraw->Release();
        lpDirectDraw = NULL;
        return (0);
    }

    ddrval = lpDirectDraw->SetDisplayMode (800, 600, 32, 0, 0);
    if (ddrval != DD_OK)
    {
        lpDirectDraw->Release();
        lpDirectDraw = NULL;
        return (0);
    }

    if (!hwnd)
    {
        MessageBox(NULL, L"Error creating window",
            L"Error", MB_OK | MB_ICONERROR);
        return 1;
    }

    ShowWindow(hwnd, nShowCmd);

    MSG msg;

    while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int)msg.wParam;
}



die fehlermeldungen:


Zitat


Fehler 2 error LNK2001: Nicht aufgelöstes externes Symbol "_IID_IDirectDraw7". main.obj

...

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

...

Fehler 3 fatal error LNK1120: 2 nicht aufgelöste externe Verweise. C:\Dokumente und Einstellungen\$ilentSnooc\Eigene Dateien\MS Visual C++\DirectX\3d\Debug\3d.exe 1



ich kann mir schon denken wo der fehler liegt ^^
die funktion CreateWindowEx wird wohl nicht Win32-mäßig genug sein .. ist das ansatzweise richtig? ^^

vllt. kann mir ja jemand helfen :)[/quote][/cpp]
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

2

19.06.2006, 11:34

ddraw.lib gelinkt?

mfg Philipp

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

3

19.06.2006, 12:11

Phil hat recht. Du musst die Fehlermeldungen schon richtig lesen :)

da steht "DirectDrawCreateEx" und nicht "CreateWindowEx"

Wie man leider feststellt ist das ein häufiges Problem, wenn man einen Fehler nicht finden kann. Man muss die Fehlermeldungen schon gut durchlesen, um alle Informationen zu finden. Die meisten Sachen sind plötzlich glasklar, wenn man erstmal den Compiler-Fehler verstanden hat (oder den Linker-Fehler, wie in diesem Fall)

Ich kenne ja auch den g++, und der ist lange nicht so ausführlich in den Meldungen wie VC++. ;)

MfG
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

4

19.06.2006, 12:49

wenn das nicht gelinkt wäre dann würde da ja stehn

Zitat


Fehler 1 fatal error C1083: Datei (Include) kann nicht geöffnet werden: "ddraw.h": No such file or directory c:\dokumente und einstellungen\$ilentsnooc\eigene dateien\ms visual c++\directx\3d\3d\main.cpp 3


oder?

muss ich ddraw.lib selbst noch linken? ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

ext

Treue Seele

  • Private Nachricht senden

5

19.06.2006, 12:52

ja..


..wobei die Frage überflüssig ist, du hättest es auch einfach testen können :p

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

6

19.06.2006, 13:31

Argh.

Was hat denn bitte ein "#include" mit dem Linken der entsprechenden Bibliothek zu tun? :shock:

Das sind zwei komplett unterschiedliche Schritte auf dem Weg zum endgültigen Programm.

MfG,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

7

19.06.2006, 17:22

he?

1.) SDK installieren
2.) #include <ddraw.h>
3.) ddraw.lib linken (Projekteinstellungen)

wobei Punkt 2 und 3 nichts miteinander zu tun haben.

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

8

19.06.2006, 18:02

Ach ürigens... vor dem return in der WinMain hinter dem GetMessage-Kran noch ein Release schreiben ist nicht schlecht. So wird die Schnittstelle auch wieder freigegeben. ;)

Anonymous

unregistriert

9

19.06.2006, 18:24

www.germangamedev.de << FunnyBreak

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

10

20.06.2006, 10:05

hm also ...
die DirectX SDK hat auch die ddraw.lib

jetz hab ich die gelinkt

(C:\Programme\Microsoft DirectX SDK (December 2005)\Lib\x86)

geht derwegen nicht ^^


*EDIT:
wenn ich das projekt runterlade, dann funktioniert es übrigens...
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige