Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/mergeFS18/src/libraries/core/module/DynLib.h @ 12258

Last change on this file since 12258 was 11071, checked in by landauf, 9 years ago

merged branch cpp11_v3 back to trunk

  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4    (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2006 Torus Knot Software Ltd
8Also see acknowledgements in Readme.html
9
10This program is free software; you can redistribute it and/or modify it under
11the terms of the GNU Lesser General Public License as published by the Free Software
12Foundation; either version 2 of the License, or (at your option) any later
13version.
14
15This program is distributed in the hope that it will be useful, but WITHOUT
16ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
18
19You should have received a copy of the GNU Lesser General Public License along with
20this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21Place - Suite 330, Boston, MA 02111-1307, USA, or go to
22http://www.gnu.org/copyleft/lesser.txt.
23
24You may alternatively use this source under the terms of a specific version of
25the OGRE Unrestricted License provided you have obtained such a license from
26Torus Knot Software Ltd.
27-----------------------------------------------------------------------------
28*/
29
30// 08/11/2009: Small adjustments for Orxonox by Fabian 'x3n' Landau
31
32/**
33    @file
34    @ingroup Management CoreGame
35    @brief Declaration of DynLib which represents a dynamically loaded module.
36*/
37
38#ifndef _Core_DynLib_H__
39#define _Core_DynLib_H__
40
41#include "core/CorePrereqs.h"
42
43#include <string>
44
45#if defined(ORXONOX_PLATFORM_WINDOWS)
46#    define DYNLIB_HANDLE hInstance
47#    define DYNLIB_LOAD( a ) LoadLibraryEx( a, nullptr, LOAD_WITH_ALTERED_SEARCH_PATH )
48#    define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
49#    define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
50
51struct HINSTANCE__;
52typedef struct HINSTANCE__* hInstance;
53
54#elif defined(ORXONOX_PLATFORM_UNIX)
55#    define DYNLIB_HANDLE void*
56#    define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY | RTLD_GLOBAL)
57#    define DYNLIB_GETSYM( a, b ) dlsym( a, b )
58#    define DYNLIB_UNLOAD( a ) dlclose( a )
59#endif
60
61namespace orxonox
62{
63    /** %Resource holding data about a dynamic library.
64        @remarks
65            This class holds the data required to get symbols from
66            libraries loaded at run-time (i.e. from DLL's for so's)
67        @author
68            Adrian Cearnãu (cearny@cearny.ro)
69        @since
70            27 January 2002
71    */
72    class _CoreExport DynLib
73    {
74    protected:
75        std::string mName;
76        /// Gets the last loading error
77        std::string dynlibError(void);
78    public:
79        /** Default constructor - used by DynLibManager.
80            @warning
81                Do not call directly
82        */
83        DynLib( const std::string& name );
84
85        /** Default destructor.
86        */
87        ~DynLib();
88
89        /** Load the library
90        */
91        void load();
92        /** Unload the library
93        */
94        void unload();
95        /// Get the name of the library
96        const std::string& getName(void) const { return mName; }
97
98        /**
99            Returns the address of the given symbol from the loaded library.
100            @param
101                strName The name of the symbol to search for
102            @returns
103                If the function succeeds, the returned value is a handle to
104                the symbol.
105            @par
106                If the function fails, the returned value is <b>nullptr</b>.
107
108        */
109        void* getSymbol( const std::string& strName ) const throw();
110
111    protected:
112
113        /// Handle to the loaded library.
114        DYNLIB_HANDLE m_hInst;
115    };
116
117}
118
119#endif /* _Core_DynLib_H__ */
Note: See TracBrowser for help on using the repository browser.