rtengine/src/runtime/dynamic_libs.c
2024-01-16 16:10:56 +01:00

46 lines
1.0 KiB
C

#include "dynamic_libs.h"
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
RT_DLLEXPORT rt_dynlib rtOpenCallerLib(void) {
return (rt_dynlib)GetModuleHandleW(NULL);
}
RT_DLLEXPORT rt_dynlib rtOpenLib(const char *libname) {
wchar_t libname_w[MAX_PATH];
MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, libname, -1, libname_w, MAX_PATH);
HMODULE mod = LoadLibraryW(libname_w);
return (rt_dynlib)mod;
}
RT_DLLEXPORT void *rtGetSymbol(rt_dynlib lib, const char *symbol) {
return (void *)GetProcAddress((HMODULE)lib, symbol);
}
RT_DLLEXPORT void rtCloseLib(rt_dynlib lib) {
FreeLibrary((HMODULE)lib);
}
#elif defined(__linux__)
#include <dlfcn.h>
RT_DLLEXPORT rt_dynlib rtOpenCallerLib(void) {
return dlopen(NULL, RTLD_NOW | RTLD_LOCAL);
}
RT_DLLEXPORT rt_dynlib rtOpenLib(const char *libname) {
return dlopen(libname, RTLD_NOW | RTLD_LOCAL);
}
RT_DLLEXPORT void *rtGetSymbol(rt_dynlib lib, const char *symbol) {
return dlsym(lib, symbol);
}
RT_DLLEXPORT void rtCloseLib(rt_dynlib lib) {
dlclose(lib);
}
#endif