Crazy Eddies GUI System  0.7.6
CEGUIDynamicModule.h
00001 /***********************************************************************
00002     filename:   CEGUIDynamicModule.h
00003     created:    Tue Mar 7 2006
00004     author:     Paul D Turner <paul@cegui.org.uk>
00005 *************************************************************************/
00006 /***************************************************************************
00007  *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
00008  *
00009  *   Permission is hereby granted, free of charge, to any person obtaining
00010  *   a copy of this software and associated documentation files (the
00011  *   "Software"), to deal in the Software without restriction, including
00012  *   without limitation the rights to use, copy, modify, merge, publish,
00013  *   distribute, sublicense, and/or sell copies of the Software, and to
00014  *   permit persons to whom the Software is furnished to do so, subject to
00015  *   the following conditions:
00016  *
00017  *   The above copyright notice and this permission notice shall be
00018  *   included in all copies or substantial portions of the Software.
00019  *
00020  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00021  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00022  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00023  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
00024  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
00025  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
00026  *   OTHER DEALINGS IN THE SOFTWARE.
00027  ***************************************************************************/
00028 #ifndef _CEGUIDynamicModule_h_
00029 #define _CEGUIDynamicModule_h_
00030 
00031 #include "CEGUIString.h"
00032 
00033 /*************************************************************************
00034     The following is basically taken from DynLib.h, which is part of
00035     the Ogre project (http://www.ogre3d.org/)
00036 *************************************************************************/
00037 #if defined(__WIN32__) || defined(_WIN32)
00038 #   define DYNLIB_HANDLE hInstance
00039 #   define DYNLIB_LOAD( a ) LoadLibrary( a )
00040 #   define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
00041 #   define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
00042 
00043     struct HINSTANCE__;
00044     typedef struct HINSTANCE__* hInstance;
00045 
00046 #elif defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__HAIKU__)
00047 #    define DYNLIB_HANDLE void*
00048 #    define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY )
00049 #    define DYNLIB_GETSYM( a, b ) dlsym( a, b )
00050 #    define DYNLIB_UNLOAD( a ) dlclose( a )
00051 #    define DYNLIB_ERROR( ) dlerror( )
00052 
00053 #elif defined(__APPLE_CC__)
00054 #    define DYNLIB_HANDLE CFBundleRef
00055 #    define DYNLIB_LOAD( a ) mac_loadExeBundle( a )
00056 #    define DYNLIB_GETSYM( a, b ) mac_getBundleSym( a, b )
00057 #    define DYNLIB_UNLOAD( a ) mac_unloadExeBundle( a )
00058 #    define DYNLIB_ERROR( ) mac_errorBundle()
00059 #endif
00060 
00061 // Start of CEGUI namespace section
00062 namespace CEGUI
00063 {
00069 class CEGUIEXPORT DynamicModule
00070 {
00071 public:
00083     DynamicModule(const String& name);
00084 
00093     ~DynamicModule();
00094 
00099     const String& getModuleName() const;
00100 
00114     void* getSymbolAddress(const String& symbol) const;
00115 
00116 private:
00122     String getFailureString() const;
00123 
00125     String d_moduleName;
00127     DYNLIB_HANDLE d_handle;
00128 };
00129 
00130 } // End of  CEGUI namespace section
00131 
00132 #endif // end of guard _CEGUIDynamicModule_h_