| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #pragma once
- #include "BsPrerequisitesUtil.h"
- /** @addtogroup General
- * @{
- */
- #if BS_PLATFORM == BS_PLATFORM_WIN32
- # define DYNLIB_HANDLE hInstance
- # define DYNLIB_LOAD( a ) LoadLibraryEx( a, NULL, LOAD_WITH_ALTERED_SEARCH_PATH )
- # define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
- # define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
- struct HINSTANCE__;
- typedef struct HINSTANCE__* hInstance;
- #elif BS_PLATFORM == BS_PLATFORM_LINUX
- # define DYNLIB_HANDLE void*
- # define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY | RTLD_GLOBAL)
- # define DYNLIB_GETSYM( a, b ) dlsym( a, b )
- # define DYNLIB_UNLOAD( a ) dlclose( a )
- #elif BS_PLATFORM == BS_PLATFORM_APPLE
- # define DYNLIB_HANDLE void*
- # define DYNLIB_LOAD( a ) mac_loadDylib( a )
- # define DYNLIB_GETSYM( a, b ) dlsym( a, b )
- # define DYNLIB_UNLOAD( a ) dlclose( a )
- #endif
- namespace BansheeEngine
- {
- /** Class that holds data about a dynamic library. */
- class BS_UTILITY_EXPORT DynLib
- {
- public:
- /** Constructs the dynamic library object and loads the library with the specified name. */
- DynLib(const String& name);
- ~DynLib();
- /** Loads the library. Does nothing if library is already loaded. */
- void load();
- /** Unloads the library. Does nothing if library is not loaded. */
- void unload();
- /** Get the name of the library. */
- const String& getName() const { return mName; }
- /**
- * Returns the address of the given symbol from the loaded library.
- *
- * @param[in] strName The name of the symbol to search for.
- * @return If the function succeeds, the returned value is a handle to the symbol. Otherwise null.
- */
- void* getSymbol(const String& strName) const;
- protected:
- friend class DynLibManager;
- /** Gets the last loading error. */
- String dynlibError();
- protected:
- String mName;
- DYNLIB_HANDLE m_hInst; // Handle to the loaded library.
- };
- }
- /** @} */
|