Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. // header
  2.  
  3. #ifndef _RENDERER_H_
  4. #define _RENDERER_H_
  5.  
  6. #include "Grid.h"
  7.  
  8. namespace tmplq
  9. {
  10.  
  11.     class Renderer
  12.     {
  13.  
  14.     public:
  15.  
  16.         static Renderer& Get();
  17.  
  18.         // we create the instance inside the dll
  19.         // and set the program's instance to the
  20.         // same pointer
  21.         static void Set(Renderer* a_Instance);
  22.  
  23.         // test function
  24.         Grid* CreateGrid();
  25.    
  26.     private:
  27.    
  28.         // constructors are private to avoid
  29.         // having a singleton with two instances,
  30.         // one for the dll and one for the program
  31.         Renderer();
  32.         ~Renderer();
  33.    
  34.         static Renderer* s_Instance;
  35.    
  36.     }; // class Renderer
  37.  
  38.     // DLL_FUNC is __declspec(dllexport) when
  39.     // compiling DLL and __declspec(dllimport) when
  40.     // compiling program
  41.  
  42.     extern "C" DLL_FUNC Renderer* CreateRenderer();
  43.  
  44. }; // namespace tmplq
  45.    
  46. #endif
  47.  
  48. // source
  49.  
  50. #include "Defines.h"
  51.  
  52. #include "Renderer.h"
  53.  
  54. namespace tmplq
  55. {
  56.  
  57.     Renderer* Renderer::s_Instance = NULL;
  58.  
  59.     void Renderer::Set(Renderer* a_Instance)
  60.     {
  61.         s_Instance = a_Instance;
  62.     }
  63.  
  64.     Renderer::Renderer()
  65.     {
  66.  
  67.     }
  68.  
  69.     Renderer::~Renderer()
  70.     {
  71.  
  72.     }
  73.  
  74.     Renderer& Renderer::Get()
  75.     {
  76.         if (!s_Instance) { s_Instance = new Renderer; }
  77.         return *s_Instance;
  78.     }
  79.  
  80.     // this is to avoid "inconsistent linkage" warnings
  81. #ifdef COMPILE_DLL
  82.  
  83.     Renderer* CreateRenderer()
  84.     {
  85.         return &Renderer::Get();
  86.     }
  87.  
  88. #endif
  89.  
  90. }
  91.  
  92. // usage
  93.  
  94. HINSTANCE dll = LoadLibrary("Render.dll");
  95. typedef Renderer* (*RendererFunc)();
  96. RendererFunc func = (RendererFunc)GetProcAddress(dll, "CreateRenderer");
  97. Renderer::Set(func());
  98.  
  99. Grid* createsuccess = Renderer::Get().CreateGrid();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement