XNSim/XNCore_Win/XNGlobalDefine/XNDynamicLoad.h

49 lines
906 B
C
Raw Normal View History

2025-07-19 12:44:06 +08:00
#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