| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /*
- -----------------------------------------------------------------------------
- This source file is part of OGRE
- (Object-oriented Graphics Rendering Engine)
- For the latest info, see http://www.ogre3d.org/
- Copyright (c) 2000-2011 Torus Knot Software Ltd
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- -----------------------------------------------------------------------------
- */
- #pragma once
- #include "CmPrerequisitesUtil.h"
- #include "CmString.h"
- #if CM_PLATFORM == CM_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 CM_PLATFORM == CM_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 CM_PLATFORM == CM_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 CamelotFramework {
- /** \addtogroup Core
- * @{
- */
- /** \addtogroup General
- * @{
- */
- /** Resource holding data about a dynamic library.
- @remarks
- This class holds the data required to get symbols from
- libraries loaded at run-time (i.e. from DLL's for so's)
- @author
- Adrian Cearn„u ([email protected])
- @since
- 27 January 2002
- @see
- Resource
- */
- class CM_UTILITY_EXPORT DynLib
- {
- protected:
- String mName;
- /// Gets the last loading error
- String dynlibError(void);
- public:
- /** Default constructor - used by DynLibManager.
- @warning
- Do not call directly
- */
- DynLib( const String& name );
- /** Default destructor.
- */
- ~DynLib();
- /** Load the library
- */
- void load();
- /** Unload the library
- */
- void unload();
- /// Get the name of the library
- const String& getName(void) const { return mName; }
- /**
- Returns the address of the given symbol from the loaded library.
- @param
- strName The name of the symbol to search for
- @returns
- If the function succeeds, the returned value is a handle to
- the symbol.
- @par
- If the function fails, the returned value is <b>NULL</b>.
- */
- void* getSymbol( const String& strName ) const throw();
- protected:
- /// Handle to the loaded library.
- DYNLIB_HANDLE m_hInst;
- };
- /** @} */
- /** @} */
- }
|