Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // header
- #ifndef _RENDERER_H_
- #define _RENDERER_H_
- #include "Grid.h"
- namespace tmplq
- {
- class Renderer
- {
- public:
- static Renderer& Get();
- // we create the instance inside the dll
- // and set the program's instance to the
- // same pointer
- static void Set(Renderer* a_Instance);
- // test function
- Grid* CreateGrid();
- private:
- // constructors are private to avoid
- // having a singleton with two instances,
- // one for the dll and one for the program
- Renderer();
- ~Renderer();
- static Renderer* s_Instance;
- }; // class Renderer
- // DLL_FUNC is __declspec(dllexport) when
- // compiling DLL and __declspec(dllimport) when
- // compiling program
- extern "C" DLL_FUNC Renderer* CreateRenderer();
- }; // namespace tmplq
- #endif
- // source
- #include "Defines.h"
- #include "Renderer.h"
- namespace tmplq
- {
- Renderer* Renderer::s_Instance = NULL;
- void Renderer::Set(Renderer* a_Instance)
- {
- s_Instance = a_Instance;
- }
- Renderer::Renderer()
- {
- }
- Renderer::~Renderer()
- {
- }
- Renderer& Renderer::Get()
- {
- if (!s_Instance) { s_Instance = new Renderer; }
- return *s_Instance;
- }
- // this is to avoid "inconsistent linkage" warnings
- #ifdef COMPILE_DLL
- Renderer* CreateRenderer()
- {
- return &Renderer::Get();
- }
- #endif
- }
- // usage
- HINSTANCE dll = LoadLibrary("Render.dll");
- typedef Renderer* (*RendererFunc)();
- RendererFunc func = (RendererFunc)GetProcAddress(dll, "CreateRenderer");
- Renderer::Set(func());
- Grid* createsuccess = Renderer::Get().CreateGrid();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement