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

leo

Frischling

  • »leo« ist der Autor dieses Themas
  • Private Nachricht senden

1

28.09.2005, 21:15

Einfacher D3D Versuch geht schief

Hallo!

Ich lese zur Zeit das Buch "3D Spieleprogrammierung...". Jetzt wollte ich auch mal selbst was kleines dazu programmieren und hab mit diesem kleinen Code angefangen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <Windows.h>
#include <d3d9.h>

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil) 
{

    PDIRECT3D9 pD3D = Direct3DCreate9(D3D_SDK_VERSION);

}


Linker-Ausgabe:

Quellcode

1
[Linker error] undefined reference to `Direct3DCreate9@4'


Ich benutze Dev-C++ und hab das DX9 Paket installiert.

Was mache ich jetzt hier falsch?

Mfg,
Leo

EDIT: Merke gerade, falsches Forum.. :rolleyes:

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

28.09.2005, 21:25

Du musst die lib in den Linker eintragen ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

leo

Frischling

  • »leo« ist der Autor dieses Themas
  • Private Nachricht senden

3

28.09.2005, 21:29

Öhm, ok, wie geht das denn so ungefähr? :)

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

28.09.2005, 22:08

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
// I N C L U D E S ###########################################################

#include <windows.h> // Windowsheaderdatei

#include <d3d9.h>    // Direct3D9 Krimskrams


// L I N K E R ###############################################################

#pragma comment(lib, "d3d9.lib") // Direct3D9 linken


// M A K R O S ###############################################################

    // Funktion zum sicheren freigeben eines COM-Objekts

template<typename T> inline void safeRelease (T*& object)
{
        // Wenn Objekt != NULL --> Freigeben und NULLen

    if (object != NULL)
    {
        object->Release ();
        object = NULL;
    }
}

// F U N K T I O N E N #######################################################

    // Einsprungspunkt des Programms

int __stdcall WinMain (::HINSTANCE__* instance, ::HINSTANCE__* prevInstance, char* cmdLine, int cmdShow)
{
        // Objekt erstellen

    ::IDirect3D9* direct3d = ::Direct3DCreate9 (D3D_SDK_VERSION);

        // Objekt ggf. Freigeben

    safeRelease (direct3d);

        // Ordentlich beenden

    return 0;
}


Wichtige Dinge beachten:

1. Header werden klein geschrieben
2. besorg dir klarheit, WINAPI, HINSTANCE, LPSTR das sind so dinge die müssen echt nicht sein
3. Entweder code komplett in Englisch und Kommentare in Deutsch oder ganz englisch, mit "hThisInstance" und "nFunsterStil" sträuben sich sicherlich nicht nur mir die Nackenhaare
4. COM-Objekte immer Freigeben nachdem sie nicht mehr gebraucht werden, es sei denn Du möchtest ein Speicherleck der größe von Europa in deinem Ram haben.
5. return 0; sollte sein, sonst denkt Windows, Unix oder andere Betriebssysteme das das Programm fehlerhaft beendet wurde und führt nötige Aktionen durch die nicht nötig sind!
6. Kommentare. Ja auch bei kleineren Programmen sollte man Kommentare benutzen, ich seh das immer wieder in meinen Grundkursen für C++ wo es dann heißt "Herr Ullmann, was macht da meine Funktion/dieser Code/dieser Algo/usw." und ich da manchmal denke "Jesus, warum benutzt du keine Kommentare? Das prädige ich doch ständig!".
7. Damit Du dir viele Freunde machst im C++ Bereich: Scheiß auf die Ungarische Notation, die ist bei C++ Codern so verhasst ein Schweineschnitzel bei Mosslems auf dem Teller. Also nix 'h', 'p', 'n', 'lpsz' usw.

Punkte 1-6 sollte man einhalten wenn man später nicht Fehlersuchen will die man hätte vermeiden können und Punkt 7 musst Du wissen, ist nur eine Empfehlung ;)

5

28.09.2005, 22:23

und nur so neben bei...

Zitat


"3D Spieleprogrammierung..."

Öhm, du bist im Unterforum "C++ für Spieleprogrammierer" und guck mal.. direkt da drunter liegt das für "3D Spieleprogrammierung..."
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Danny

Frischling

Beiträge: 40

Wohnort: Hamburg

  • Private Nachricht senden

6

29.09.2005, 11:51

Hi,

probier es mal so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <Windows.h>
#include <d3d9.h>

#pragma comment(lib, "d3d9.lib")

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{

    LPDIRECT3D9 pD3D = Direct3DCreate9(D3D_SDK_VERSION);

    //Das heisst LPDIRECT3D9 und nicht PDIRECT3D9 wie bei dir


} 


So müsste es klappen.

Gruß
Google ist dein Freund und Helfer!

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

29.09.2005, 12:00

Danny
typedef PDIRECT3D, LPDIRECT3D IDirect3D*;

Nebenbei ich hab doch schon die Lösung gepostet? LPDIRECT3D? Pah, fürs Klo!

Danny

Frischling

Beiträge: 40

Wohnort: Hamburg

  • Private Nachricht senden

8

29.09.2005, 12:10

Oh sorry nicht aufgepasst.

Gruß
Google ist dein Freund und Helfer!

leo

Frischling

  • »leo« ist der Autor dieses Themas
  • Private Nachricht senden

9

29.09.2005, 13:32

Danke.

@Patrick: Jetzt übertreib mal nicht. Ich wollte nur mal schnell ein kleines Testprogramm machen. Und dazu hab ich eben mal eine Zeile von der CD des Buches kopiert. Es tut mir Leid, dass ich jetzt ausversehen ungarische Notation in dem Code hatte. Das Objekt habe ich auch nicht freigegeben, ich wollte nur schnell wissen, ob das mit der D3D Lib funktioniert hat. Zu den Kommentaren: Ich brauche nicht für jeden Schritt ein Kommentar. Sowas "object->Release(); // Gibt das Objekt frei" find ich einfach sinnlos, da der Code an dieser Stelle selbstaussagend ist. Natürlich kommentiere ich, aber ich übertreibe dabei nicht.

EDIT: Hab jetzt mal beide Codes probiert, geht aber nicht: [Linker error] undefined reference to `Direct3DCreate9@4'

Danny

Frischling

Beiträge: 40

Wohnort: Hamburg

  • Private Nachricht senden

10

29.09.2005, 15:28

1. Minute Google:

http://www.source-code.de/ptopic,5816,81…1a60383000.html

Vielleicht hilft dir das ja weiter ;)

Gruß
Google ist dein Freund und Helfer!

Werbeanzeige