statische Klasse mit LIBs
-
Hallo,
ich habe ein Frage. Ich bin gerade dabei, eine kleine Grafikengine für ein paar Testprojekte zu entwicklen. Gerade bin ich dabei, Direct3D zu implenmentieren. Dies wollte ich so wie die TriBase-Engine mit eienr statischen Klasse versuchen. Meine Deffinition sieht so aus:
#ifndef __DIRECT3D__ #define __DIRECT3D__ class CDirect3D { private: static PDIRECT3D9 m_pD3D; static PDIRECT3DDEVICE9 m_pD3DDevice; static D3DCAPS9 m_Caps; static D3DPRESENT_PARAMETERS m_PresentParams; public: static ENGINE_API int Init(CConfigValues Config, HWND hWindow); static ENGINE_API int Exit(void); static inline PDIRECT3DDEVICE9 GetDevice() {return m_pD3DDevice;} }; #endif
. Die dazugehörige cpp-Datei sieht so aus:
#include <Engine.h> using namespace std; using namespace Engine; PDIRECT3D9 Engine::CDirect3D::m_pD3D; PDIRECT3DDEVICE9 Engine::CDirect3D::m_pD3DDevice; D3DCAPS9 Engine::CDirect3D::m_Caps; D3DPRESENT_PARAMETERS Engine::CDirect3D::m_PresentParams; ENGINE_API int CDirect3D::Init(CConfigValues Config, HWND hWindow) { // ---------------->
Nun funktioniert soweit alles. Alles wird schön Initallisiert.
In meiner Anwendung nun wird das ganze per LIB und Header (include) "eingefügt". Initallisierung läuft auch ganz toll, nur, wenn ich jetzt CDirect3D::GetDevice()->... aufrufe, bringt er nur einen NULL-Zeiger zurück. Wenn ich aber in der Initallisierungsmethode oder in irgndeiner anderen CDirect3D-Methode den m_pD3DDevice;-Zeiger abfrage, ist dieser nicht NULL.
Hat jemand vielleicht eine idee, woran das liegen könnte,
vielen Dank,
Chrissi
-
bitte ins spiele+grafikprogrammiererforum
aber das das hier fuktioniert verwundert mich doch schon:
#include <Engine.h>
die <> sind bei include den header dateien im standardverzeichnis deines compilers vorbehalten,wird zwar von einigen compilern missachtet, ist aber von der übersicht her viel schöner, zum projekt gehörende selber erstellte header mit "" zu includen
#ifndef __DIRECT3D__ #define __DIRECT3D__
der einzelen oder doppelte underscore"_" am woertanfang ist desweiteren dem compiler vorbehalten, kann hard to find bugs geben
ansonsten wär en bissl code net schlecht, und statt ner kompletten static klasse wär ein singleton doch etwas schöner(meine meinung)
-
schau mal im Debugger nach, was da abläuft. Für Singletons solltest du eh besser andere Strukturen verwenden. zB. das Singleton aus Modern C++ Design (siehe http://sourceforge.net/projects/loki-lib) würde dir hier sicher helfen Fehler zu vermeiden, da Initialisierungs/Deinitialisierungs Probleme umgangen werden
btw.
http://www.c-plusplus.net/forum/viewtopic.php?t=39461
http://www.c-plusplus.net/forum/viewtopic.php?t=41464
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Lösche die GetDevice Methode und schreibe irgndeine andere Methode. Die hat dann nicht den NULL Zeiger und gibt ihn zurück.
Bye, TGGC \-/