DirectX Schnittstelle initialisieren



  • Hi ihr,

    Habe eben mit DirectX9 angefangen und habe schon ein Problem nur dem Initialisieren von der DirectX Schnittstelle.
    Ich benutze DevC++ und habe im Compiler sowohl LIB - als auch Bibliotheksverzeichnis des DirectX SDK's angegeben.
    Dennoch meldet der folgende Quelltext einen Fehler:

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

    Mein Quelltext ist hier:

    #include <windows.h>
    #include <StdIO.h>
    #include <D3D9.h>
    int g_iNumAdapters;
    D3DADAPTER_IDENTIFIER9* g_pAdapters;
    PDIRECT3D9 g_pD3D = NULL;
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE HPrevInstance, char* pcCmdLine, int iShowCmd)
    {
    
        char acAdapterInfo[1024];
        g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);        
    }
    

    Kann sich jemand vorstellen woher dieser Fehler kommt?

    cya

    David



  • Du musst dem Linker mitteilen, dass er die DirectX-Libs einbindet. Das wärs. Ansonsten wäre noch eine Empfehlung, Dev-C++ wegzuwerfen, da es nicht mehr weiterentwickelt wird, schon länger nicht. Nimm lieber die Express Edition von Visual Studio.



  • Habe mir jetzt Visual Studio Express 2008 heruntergeladen und installiert.
    Allerdings kann ich irgendwie keine API-Programme schreiben.
    Ich dachte ein Win32er Plugin wäre bereits mit bei der 2008er Edition dabei?





  • Hey,

    Habs jetzt geschafft, dass der Compiler WINAPI frisst.
    Hab nun weiter mit DirectX gemacht:

    #include "stdafx.h"
    #include <windows.h>
    #include <StdIO.h>
    #include <D3D9.h>
    int g_iNumAdapters;
    D3DADAPTER_IDENTIFIER9* g_pAdapters;
    PDIRECT3D9 g_pD3D = NULL;
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE HPrevInstance, char* pcCmdLine, int iShowCmd)
    {   
        char acAdapterInfo[1024];
        g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);        
    }
    

    Die vorletzte Zeile verursacht schon wieder Fehler - echt unglaublich.

    error LNK2001: Nicht aufgelöstes externes Symbol "_Direct3DCreate9@4".

    Das muss noch irgendwas mit den SDK-Dateien zutun haben.
    Ich habe unter Bibliothsdateien den LIB-Ordner des SDK's angegeben und bei includedateien den inlcudeordner des SDK's.

    Was kann noch falsch sein? Echt zum verzweifeln^^

    cya
    David



  • Du musst dem Linker schon sagen, in welche konkrete Lib er reingucken soll, in diesem Fall "d3d9.lib"



  • Hab jetzt des Rätsels lösung gefunden.
    Wenn ich

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

    vor meinen Code schreieb funktioniert er.
    Die einzige Frage ist nurnoch, warum das nicht auch OHNE geht, weil ich hab unter Bibliotheken den LIB-Ordner des SDKs angegeben.



  • weil ich hab unter Bibliotheken den LIB-Ordner des SDKs angegeben

    Nochmal: Der Linker durchsucht natuerlich nicht *alle* Libs die er in den angegebenen Verzeichnissen finden kann.
    Du musst jede einzelne Lib in den Linker-Einstellungen hinzufuegen:
    Im Menue "Projekt" -> "Eigenschaften"
    ->"Konfigurationseigenschaften"
    ->"Linker"
    ->"Eingabe"
    ->"Zusaetzliche Abhaengigkeiten"


Anmelden zum Antworten