OpenLexocad  28.0
LibraryLoader.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <windows.h>
4 #include <iostream>
5 
6 namespace Core
7 {
12 class LibraryLoader final
13 {
14 public:
15  HMODULE handle;
16 
17  LibraryLoader() : handle(nullptr) {}
18  LibraryLoader(const wchar_t* fileName) : handle(LoadLibrary(fileName))
19  {
20  if (!handle)
21  std::wcerr << "ERROR: unable to load library " << fileName<< ". Reason: " << GetLastError() << std::endl;
22  }
23  LibraryLoader(HMODULE h) : handle(h) {}
24  LibraryLoader(LibraryLoader&& ll) : handle(ll.handle) { ll.handle = nullptr; }
26  {
27  if (handle)
28  FreeLibrary(handle);
29  handle = ll.handle;
30  ll.handle = nullptr;
31  }
33  {
34  if (handle)
35  FreeLibrary(handle);
36  }
37 
38  LibraryLoader(const LibraryLoader&) = delete;
40 
41  bool valid() const { return handle != nullptr; }
42  bool load(const wchar_t* filename)
43  {
44  if (handle)
45  FreeLibrary(handle);
46  handle = LoadLibrary(filename);
47  return handle != nullptr;
48  }
49  void free()
50  {
51  if (handle)
52  {
53  FreeLibrary(handle);
54  handle = nullptr;
55  }
56  }
57  template <typename T>
58  T resolve(const char* funcName)
59  {
60  return reinterpret_cast<T>(GetProcAddress(handle, funcName));
61  }
62 };
63 
64 
65 } // namespace Core
Core::LibraryLoader::handle
HMODULE handle
Definition: LibraryLoader.h:15
Core::LibraryLoader::valid
bool valid() const
Definition: LibraryLoader.h:41
Core::LibraryLoader::load
bool load(const wchar_t *filename)
Definition: LibraryLoader.h:42
Core::LibraryLoader::operator=
LibraryLoader & operator=(LibraryLoader &&ll)
Definition: LibraryLoader.h:25
Core::LibraryLoader::LibraryLoader
LibraryLoader()
Definition: LibraryLoader.h:17
Core::LibraryLoader::LibraryLoader
LibraryLoader(HMODULE h)
Definition: LibraryLoader.h:23
Core::LibraryLoader::operator=
LibraryLoader & operator=(const LibraryLoader &)=delete
Core::LibraryLoader::resolve
T resolve(const char *funcName)
Definition: LibraryLoader.h:58
Core::LibraryLoader::~LibraryLoader
~LibraryLoader()
Definition: LibraryLoader.h:32
Core
Definition: Base.h:5
Core::LibraryLoader::LibraryLoader
LibraryLoader(const wchar_t *fileName)
Definition: LibraryLoader.h:18
Core::LibraryLoader::LibraryLoader
LibraryLoader(const LibraryLoader &)=delete
Core::LibraryLoader
Definition: LibraryLoader.h:13
Core::LibraryLoader::free
void free()
Definition: LibraryLoader.h:49
Core::LibraryLoader::LibraryLoader
LibraryLoader(LibraryLoader &&ll)
Definition: LibraryLoader.h:24