#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