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 \-/


Anmelden zum Antworten