Dev-C++ in combinatie met DirectX SDK

Pagina: 1
Acties:

Onderwerpen


  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Ben al een avondje of wat gek aan het worden van Dev-C++ omdat hij op de één of andere manier niet houdt van DirectX. Ik krijg gewoon met geen mogelijkheid het voor elkaar om Dev-C++ dit stuk code te laten compileren:

C++:
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
#include <windows.h>
#include <d3d9.h>
#include "resource.h"

//#pragma comment(lib, "d3d9.lib")    // Van MS, converted naar MingW hieronder
//#pragma comment(lib, "d3dx9.lib")    // Van MS, converted naar MingW hieronder
#pragma comment(lib, "libd3d9.a")    // Van DevC++
#pragma comment(lib, "libd3dx9_43.a")    // Van DevC++

LPDIRECT3D9 d3d;
LPDIRECT3DDEVICE9 d3ddev;
const char g_szClassName[] = "myWindowClass";
HMENU hMenu,hSubMenu;

void initD3D(HWND hwnd) {
    d3d = Direct3DCreate9(D3D_SDK_VERSION); // Deze zorgt voor de problemen

    D3DPRESENT_PARAMETERS d3dpp;

    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = true;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = hwnd;

    d3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&d3ddev);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
// blaat hier, niet van toepassing
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {
    HWND hwnd;
    MSG Msg;

    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIcon         = (HICON)LoadImage(hInstance,MAKEINTRESOURCE(IDI_MYICON),IMAGE_ICON,128,128,LR_DEFAULTCOLOR);
    wc.hIconSm       = (HICON)LoadImage(hInstance,MAKEINTRESOURCE(IDI_MYICON),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);

    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!", "Error!",MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,g_szClassName,"DirectX-programma",WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN/*|WS_MAXIMIZE*/,0,0,640,480,NULL, NULL, hInstance, NULL);

    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!", "Error!",MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    while(1) {
        while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);// Deze gaat naar WindowProc
        }
        if(Msg.message == WM_QUIT) {
            break;
        }

        // Eternal code hier
    }
    return Msg.wParam;
}

Simpel gezegd wil Dev-C++ maar niet vatten hoe simpel het is om die (scheldwoord) DirectX9-class te laden. Elke keer krijg ik namelijk dit:
Dev-C++ schreef op donderdag 02 september 2010 @ 22:51:
[Linker error] undefined reference to `Direct3DCreate9@4'
En daar word je pissig van. Zeker als je al een miljoen keer al die sites bent afgegaan met 'oplossingen'. En ja, dat zijn er veel. En allemaal werken ze niet. Hier even wat ik inmiddels dan wel gedaan hen:
  • De Microsoft-libs naar MingW-formaat converteren, bovenin code te zien (*.a-formaat)
  • De header updaten, d3d9.h welterverstaan. Daarom wordt namelijk dat Direct3DCreate gedefinieërd.
  • De mappen van de DirectX-SDK te linken naar Dev-C++, werkte niet.
  • ... en meer gepruts dat ik me niet kan herinneren.
Wat men soms zegt is dat deze functie waar 'ie op vastloopt dubbel gedefinieërd wordt, wat bullshit is. Verder wordt wel eens gezegd dat Dev-C++ (oftewel MingW) DirectX 'gewoon' niet ondersteunt. Ook bullshit. Nog weer verderop wordt een DirectX-devpak (zeg maar een App voor Dev-C++) aanbevolen, maar de site van de download is dood. Blijft er voor mij weinig over.

Simpel gezegd: heeft er ooit iemand hier Dev-C++ (of andere IDE) met DirectX aan de praat gekregen? Visual Studio is trouwens geen optie, de IDE moet portable zijn. Uiteraard sta ik open voor alternatieven die ook geen rommel op PC's achterlaten of nodighebben.

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 12-09 06:48

Sebazzz

3dp

Kan je Dev-C++ niet met de Microsoft C++ compiler en linker gebruiken?

Als je portable wilt, waarom gebruik je geen VM?

[ Voor 27% gewijzigd door Sebazzz op 02-09-2010 23:18 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • mace
  • Registratie: Juni 2003
  • Laatst online: 00:18

mace

Sapere Aude

Heb je de lib en include mappen in het include pad van dev-c++ gezet?

En qua portability zou ik zeggen: Eclipse. :)

[ Voor 29% gewijzigd door mace op 02-09-2010 23:23 ]


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Volgens mij vergeet je gewoon de libraries te linken, probeer eens zelf met de hand te compilen?

Zie de volgende link: http://www.flipcode.com/a...X_Programs_With_GCC.shtml

(Gaat over GCC, MingW en Dev-C++)

Je hele post schreeuwt "not invented here", zelfs als je gewoon alles wilt leren en dus niet iets snel hoeft te produceren, raad ik je aan hier van af te stappen. Je kunt niet alles zelf doen .

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Sebazzz schreef op donderdag 02 september 2010 @ 23:18:
Kan je Dev-C++ niet met de Microsoft C++ compiler en linker gebruiken?

Als je portable wilt, waarom gebruik je geen VM?
Ik denk eerlijk gezegd niet dat dat zomaar kan, die compiler uit Visual Studio Express slopen, en hem in Dev-C++ doen. Maar aan de compiler ligt het niet, het gaat om de headers en de libraries. In principe is DirectX gewoon C(++), en daar is MingW goed genoeg in.

VMWare gebruiken op stick voor school en dergelijke? Niet praktisch, op school bijvoorbeeld draaien ze zelfs al op VM, Citrix WinFrame welteverstaan. Krijg je VMWare in VMWare. :+
mace schreef op donderdag 02 september 2010 @ 23:21:
Heb je de lib en include mappen in het include pad van dev-c++ gezet?

En qua portability zou ik zeggen: Eclipse. :)
De includes heb ik van de June 2010-SDK gehaald, en in Dev-C++'s Include-map neergezet. Inhoud was iets anders, maar in de oude en de nieuwe d3d9.h's werd gewoon Direct3DCreate9() gedefinieërd. |:(

Zou dan wel is willen weten naar welke lib er verwezen wordt. Ik heb namelijk alleen maar d3d9.lib en d3dx9.lib geconverteerd en gelinkt. Misschien moet er nog wel eentje gelinkt worden?

Goed, als alles niet werkt zal ik Eclipse is proberen, maar die heeft weer eens Java nodig. Maar dat kan dan wel weer op stick gezet worden. Het programma komt wel flink als bloatware over trouwens. :|
roy-t schreef op donderdag 02 september 2010 @ 23:29:
Volgens mij vergeet je gewoon de libraries te linken, probeer eens zelf met de hand te compilen?

Zie de volgende link: http://www.flipcode.com/a...X_Programs_With_GCC.shtml

(Gaat over GCC, MingW en Dev-C++)

Je hele post schreeuwt "not invented here", zelfs als je gewoon alles wilt leren en dus niet iets snel hoeft te produceren, raad ik je aan hier van af te stappen. Je kunt niet alles zelf doen .
De libraries had ik een keer gelinkt, gewoon Dev-C++ verwijzen naar die SDK, maar dat wilde niet echt. Ook is dat niet bepaald te doen op school. Daarom had ik maar eens de libs en includes die ik direct gebruik versplaatst naar stick, hoef je niet eens meer te linken. Gewoon een verbeterd bestand (MingW had al die bestanden al, ook al waren ze niet meer up to date). En nog krijg ik die stomme fout. |:(

Kijk eens! Eén zeer handige link. Die ga ik eens proberen.

En over dat laatste: waar slaat dat nou weer op? Dit is gewoon het idee van DirectX eens uitproberen. Als dat nou ook al weer niet mag van Tweakers.net... :(

Het was gewoon het idee van:

"laat ik dat eens proberen, hè klote, het werkt niet, Google gebruiken, alle oplossingen geprobeerd, nog steeds werkt het niet, laat ik het eens op Tweakers.net vragen"



Amèn, hij doet het! Heb dus precies de regels van die link gevolgd, en de boel werkt! Thanks! _/-\o_

[ Voor 3% gewijzigd door Orwell op 04-09-2010 12:16 ]


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

Direct3DCreate9 is de entrypoint van de d3d9.dll voor alle D3D apps.

De reden waarom het niet linkt is omdat jij geen importlibrary linkt in je app. In de DX SDK zit een lib/x86 forlder als ik em niet vergis, en die bevat d3d9.lib, die je nodig hebt om d3d9 apps te linken. Of die library ook werkt met jouw linker (van DevC++ dus), weet ik dan weer niet, maar anders kan je vast wel een lib maken, of anders dynamisch laden met LoadLibrary/GetProcAddress van Win32

edit:
te laat dus

[ Voor 3% gewijzigd door MLM op 04-09-2010 18:40 ]

-niks-


Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
MLM schreef op zaterdag 04 september 2010 @ 18:38:
Direct3DCreate9 is de entrypoint van de d3d9.dll voor alle D3D apps.

De reden waarom het niet linkt is omdat jij geen importlibrary linkt in je app. In de DX SDK zit een lib/x86 forlder als ik em niet vergis, en die bevat d3d9.lib, die je nodig hebt om d3d9 apps te linken. Of die library ook werkt met jouw linker (van DevC++ dus), weet ik dan weer niet, maar anders kan je vast wel een lib maken, of anders dynamisch laden met LoadLibrary/GetProcAddress van Win32

edit:
te laat dus
Ik had ook gelinkt naar die libraries, maar dan naar de met reimp naar gcc-formaat geconverteerde libraries, dus de a-libraries. Maar dat was blijkbaar niet genoeg. Daarna heb ik dus als laatste redmiddel gewoon alles geconverteerd en alle headers gekopieërd van de DirectX SDK naar Dev-C++, en toen werkte 'ie magisch genoeg opeens wel. :o

Acties:
  • 0 Henk 'm!

  • mace
  • Registratie: Juni 2003
  • Laatst online: 00:18

mace

Sapere Aude

Dat is niet magisch, dat betekent gewoon dat je je include-paden niet op orde hebt. :)

Acties:
  • 0 Henk 'm!

  • Orwell
  • Registratie: December 2009
  • Laatst online: 08-09 22:11
Nouw goed, da gaan we de boel even op een rijtje zetten, ook voor degenen die dit nog nodig gaan hebben:
  • Installeer Dev-C++ op stick of waar dan ook. We nemen even v4.9.9.2 aan.
  • Download de DirectX-SDK, versie maakt niet uit.
  • Kopieër alle headers vanuit sdkdir\Include naar devcppdir\include. Antwoord 'Ja' op overschrijven.
  • Download reimp. Zet deze in devcppdir\mingw32\bin.
  • Navigeer naar die map toe in cmd.
  • Zet dan de libraries uit sdkdir\Lib\Platform die nodig zijn voor uw project in de map naast reimp.
  • Voor voor elk van die *.lib-bestanden 'reimp <naam>.lib' uit.
  • Zet dan die gegenereerde a-bestanden in devcpp\lib. Antwoord 'Ja' op overschrijven.
  • Zet in het beteffende project in Project (Menu) --> Project Options (Submenu) --> Parameters (Tab) --> Add Library or Object (Knop) --> Selecteer alle *.a-libraries die gebruikt moeten worden.
  • Gewoon net zoals anders headers #includen.
  • Elke *.a-library met #pragma comment() includen. Zie m'n eerste post hier.
  • Voor verder gebruik van DirectX, ga naar Tools (Menu) --> Compiler Options (Menuitem) --> Compiler (Tab) --> Voer '-fcheck-new' in in het vakje voor Compilerparameters. Dit zorgt ervoor dat Dev-C++ toestaat om NULL-pointers te returnen in de vorm van een new-variabele.
Zo, dat levert helderheid op. En nu afsluiten die stofzuiger. :O

[ Voor 6% gewijzigd door Orwell op 06-09-2010 21:03 ]


Acties:
  • 0 Henk 'm!

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
Als je je project file nauw gewoon had gefixt zodat de tools wisten waar ze moeten zoeken had je dit allemaal niet hoeven doen. Om de DX SDK met VS aan de gang te krijgen moet je em toch ook echt eerst vertellen waar hij de headers en libs kan vinden hoor.

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Orwell schreef op zaterdag 04 september 2010 @ 09:51:
[...]



Amèn, hij doet het! Heb dus precies de regels van die link gevolgd, en de boel werkt! Thanks! _/-\o_
Geen probleem :).

Overigens mag je van alles van tweakers, maar eerst was er nog geen onderbouwing om gewoon VS C++ te gebruiken, dus schreeuwen wij dan natuurlijk dat je dat het beste kan gebruiken :).

~ Mijn prog blog!

Pagina: 1