Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarDynamicLib_windows.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-20 14:33:09 +1000
commit6352e8e3196f78388b6c771073f9e03eaa612673 (patch)
treee23772f79a7fbc41bc9108951e9e136857484bf4 /source/core/StarDynamicLib_windows.cpp
parent6741a057e5639280d85d0f88ba26f000baa58f61 (diff)
everything everywhere
all at once
Diffstat (limited to 'source/core/StarDynamicLib_windows.cpp')
-rw-r--r--source/core/StarDynamicLib_windows.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/source/core/StarDynamicLib_windows.cpp b/source/core/StarDynamicLib_windows.cpp
new file mode 100644
index 0000000..41272ce
--- /dev/null
+++ b/source/core/StarDynamicLib_windows.cpp
@@ -0,0 +1,43 @@
+#include "StarDynamicLib.hpp"
+#include "StarFormat.hpp"
+#include "StarString_windows.hpp"
+
+#include <windows.h>
+
+namespace Star {
+
+class PrivateDynLib : public DynamicLib {
+public:
+ PrivateDynLib(void* handle)
+ : m_handle(handle) {}
+
+ ~PrivateDynLib() {
+ FreeLibrary((HMODULE)m_handle);
+ }
+
+ void* funcPtr(const char* name) {
+ return (void*)GetProcAddress((HMODULE)m_handle, name);
+ }
+
+private:
+ void* m_handle;
+};
+
+String DynamicLib::libraryExtension() {
+ return ".dll";
+}
+
+DynamicLibUPtr DynamicLib::loadLibrary(String const& libraryName) {
+ void* handle = LoadLibraryW(stringToUtf16(libraryName).get());
+ if (handle == NULL)
+ return {};
+ return make_unique<PrivateDynLib>(handle);
+}
+
+DynamicLibUPtr DynamicLib::currentExecutable() {
+ void* handle = GetModuleHandle(0);
+ starAssert(handle);
+ return make_unique<PrivateDynLib>(handle);
+}
+
+}