49 lines
906 B
C++
49 lines
906 B
C++
#pragma once
|
|
|
|
#include "XNCore_global.h"
|
|
#include "XNString.h"
|
|
|
|
namespace XNSim {
|
|
#ifdef XN_WINDOWS
|
|
using XN_HANDLE = HMODULE;
|
|
using XN_FARPROC = FARPROC;
|
|
#else
|
|
using XN_HANDLE = void *;
|
|
using XN_FARPROC = void *;
|
|
#endif
|
|
|
|
FORCEINLINE XN_HANDLE loadLibrary(const XN_STRING &libPath) {
|
|
#ifdef XN_WINDOWS
|
|
return LoadLibrary(libPath.c_str());
|
|
#else
|
|
return dlopen(libPath.c_str(), RTLD_LAZY);
|
|
#endif
|
|
}
|
|
|
|
FORCEINLINE XN_FARPROC getSymbol(XN_HANDLE handle, const XN_STRING &symbol) {
|
|
#ifdef XN_WINDOWS
|
|
return GetProcAddress(handle, symbol.c_str());
|
|
#else
|
|
return dlsym(handle, symbol.c_str());
|
|
#endif
|
|
}
|
|
|
|
FORCEINLINE XN_STRING LoadError() {
|
|
#ifdef XN_WINDOWS
|
|
return To_XNString(GetLastError());
|
|
#else
|
|
return To_XNString(dlerror());
|
|
#endif
|
|
}
|
|
|
|
FORCEINLINE void closeLibrary(XN_HANDLE handle) {
|
|
#ifdef XN_WINDOWS
|
|
FreeLibrary(handle);
|
|
#else
|
|
dlclose(handle);
|
|
#endif
|
|
|
|
LoadError();
|
|
}
|
|
|
|
} // namespace XNSim
|