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?
-
Schau mal ob Dich das weiterbringt:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-191819.html
-
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"