Открытые члены | Закрытые члены | Закрытые данные

Класс nitro::DynamicLibLoader

Класс для загрузки динамических библиотек. Подробнее...

#include <loaders/dynamic_lib_loader.h>

Полный список членов класса

Открытые члены

 DynamicLibLoader (void)
 DynamicLibLoader (const char *LibraryPath)
 DynamicLibLoader (const std::string &LibraryPath)
void LoadLibrary (const char *LibraryPath)
void LoadLibrary (const std::string &LibraryPath)
void * GetResource (const char *ResourceName)
void * GetResource (const std::string &ResourceName)
bool ResourceExists (const char *ResourceName)
bool ResourceExists (const std::string &ResourceName)
void Release (void)
virtual ~DynamicLibLoader ()

Закрытые члены

 DynamicLibLoader (const DynamicLibLoader &)
DynamicLibLoader operator= (const DynamicLibLoader &)

Закрытые данные

void * Handle

Подробное описание

Класс для загрузки динамических библиотек.

~english Class for loading dynamic libraries.

Автор:
Додонов А.А.
Dodonov A.A.
Примеры:

get_interface.cpp, get_new_interface.cpp, interface_exported.cpp, is_plugin.cpp и release_interface.cpp.

См. определение в файле dynamic_lib_loader.h строка 48


Конструктор(ы)

nitro::DynamicLibLoader::DynamicLibLoader ( void   ) 

Конструктор.

Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 17

Перекрестные ссылки nitro::exception::code(), Handle и nitro::exception::what().

        {
                try
                {
                        Handle = NULL;
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::DynamicLibLoader( void )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::DynamicLibLoader( void )::An error occured" ) , 1 ) );
                }
        }

Граф вызовов:

nitro::DynamicLibLoader::DynamicLibLoader ( const char *  LibraryPath  ) 

Конструктор.

Аргументы:
LibraryPath - Путь к загружаемой библиотеке.
Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 33

Перекрестные ссылки nitro::exception::code(), Handle, LoadLibrary() и nitro::exception::what().

        {
                try
                {
                        Handle = NULL;
                        
                        LoadLibrary( LibraryPath );
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::DynamicLibLoader( const char * LibraryPath )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::DynamicLibLoader( const char * LibraryPath )::An error occured" ) , 0) );
                }
        }

Граф вызовов:

nitro::DynamicLibLoader::DynamicLibLoader ( const std::string &  LibraryPath  ) 

Конструктор.

Аргументы:
LibraryPath - Путь к загружаемой библиотеке.
Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 51

Перекрестные ссылки nitro::exception::code(), Handle, LoadLibrary() и nitro::exception::what().

        {
                try
                {
                        Handle = NULL;
                        
                        LoadLibrary( LibraryPath );
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::DynamicLibLoader( const std::string & LibraryPath )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::DynamicLibLoader( const std::string & LibraryPath )::An error occured" ) , 0) );
                }
        }

Граф вызовов:

nitro::DynamicLibLoader::~DynamicLibLoader (  )  [virtual]

Виртуальный деструктор.

Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 262

Перекрестные ссылки Release().

        {
                try
                {
                        Release();
                }
                catch( nitro::exception e )
                {
                }
                catch( ... )
                {
                }
        }

Граф вызовов:

nitro::DynamicLibLoader::DynamicLibLoader ( const DynamicLibLoader  )  [inline, private]

Закрытый конструктор копирования.

Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.h строка 297

{}


Методы

void * nitro::DynamicLibLoader::GetResource ( const char *  ResourceName  ) 

Функция получения ресурса из библиотеки (под ресурсом понимается либо объект либо функция).

Аргументы:
ResourceName - Имя загружаемого ресурса.
Возвращает:
Указатель на ресурс.
Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 121

Перекрестные ссылки nitro::exception::code(), Handle и nitro::exception::what().

Используется в nitro::PluginInterface::GetInterface(), nitro::PluginInterface::GetNewInterface(), GetResource(), nitro::PluginInterface::InterfaceExported() и nitro::PluginInterface::ReleaseInterface().

        {
                try
                {
                        if( Handle )
                        {
                        #if     defined( WIN32_PLATFORM ) || defined( MINGW_PLATFORM )
                                FARPROC         Address( NULL );

                                Address = GetProcAddress( *( ( HMODULE * )Handle ) , ResourceName );
                        #endif

                        #if defined( NIX_PLATFORM ) || defined( CYGWIN_PLATFORM )
                                void *                  Address( NULL );

                                Address = dlsym( Handle , ResourceName );
                        #endif

                                if( Address == NULL )
                                {
                                        throw( nitro::exception( std::string( "An error occured while getting library resource " ) + ResourceName , 1 ) );
                                }

                                return( ( void * )Address );
                        }
                        else
                        {
                                throw( nitro::exception( std::string( "Library was not loaded" ) , 1 ) ); 
                        }
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::GetResource( const char * ResourceName )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::GetResource( const char * ResourceName )::An error occured" ) , 1 ) );
                }
        }

Граф вызовов:

void * nitro::DynamicLibLoader::GetResource ( const std::string &  ResourceName  ) 

Функция получения ресурса из библиотеки (под ресурсом понимается либо объект либо функция).

Аргументы:
ResourceName - Имя загружаемого ресурса.
Возвращает:
Указатель на ресурс.
Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 161

Перекрестные ссылки nitro::exception::code(), GetResource() и nitro::exception::what().

        {
                try
                {
                        return( GetResource( ResourceName.c_str() ) );
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::GetResource( const std::string & ResourceName )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::GetResource( const std::string & ResourceName )::An error occured" ) , 1 ) );
                }
        }

Граф вызовов:

void nitro::DynamicLibLoader::LoadLibrary ( const std::string &  LibraryPath  ) 

Функция загрузки библиотеки.

Аргументы:
LibraryPath - Путь к загружаемой библиотеке.
Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 105

Перекрестные ссылки nitro::exception::code(), LoadLibrary() и nitro::exception::what().

        {
                try
                {
                        LoadLibrary( LibraryPath.c_str() );
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::LoadLibrary( const std::string & LibraryPath )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::LoadLibrary( const std::string & LibraryPath )::An error occured" ) , 1 ) );
                }
        }

Граф вызовов:

void nitro::DynamicLibLoader::LoadLibrary ( const char *  LibraryPath  ) 

Функция загрузки библиотеки.

Аргументы:
LibraryPath - Путь к загружаемой библиотеке.
Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 69

Перекрестные ссылки nitro::exception::code(), Handle, Release() и nitro::exception::what().

Используется в DynamicLibLoader() и LoadLibrary().

        {
                try
                {
                        Release();
                        
                #if     defined( WIN32_PLATFORM ) || defined( MINGW_PLATFORM )
                        Handle = ( void * ) new HMODULE;
                        
                        *( ( HMODULE * )Handle ) = LoadLibraryA( LibraryPath );

                        if( *( ( HMODULE * )Handle ) == NULL )
                        {
                                throw( nitro::exception( std::string( "An error occured while loading library " ) + LibraryPath , 0 ) );
                        }
                #endif

                #if     defined( NIX_PLARFORM ) || defined( CYGWIN_PLATFORM )
                        Handle = dlopen( LibraryPath , RTLD_NOW | RTLD_GLOBAL );

                        if( Handle == NULL )
                        {
                                throw( nitro::exception( std::string( "An error occured while loading library " ) + LibraryPath , 0 ) );
                        }
                #endif
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::LoadLibrary( const char * LibraryPath )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::LoadLibrary( const char * LibraryPath )::An error occured" ) , 1 ) );
                }
        }

Граф вызовов:

DynamicLibLoader nitro::DynamicLibLoader::operator= ( const DynamicLibLoader  )  [inline, private]

Закрытый оператор присваивания.

Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.h строка 309

{return( *this );}

void nitro::DynamicLibLoader::Release ( void   ) 

Функция освобождения ресурсов.

Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 233

Перекрестные ссылки nitro::exception::code(), Handle и nitro::exception::what().

Используется в LoadLibrary() и ~DynamicLibLoader().

        {
                try
                {
                        if( Handle )
                        {
                        #if     defined( WIN32_PLATFORM ) || defined( MINGW_PLATFORM )
                                FreeLibrary( * ( ( HMODULE * )Handle ) );
                                
                                delete ( HMODULE * )Handle;
                        #endif

                        #if defined( NIX_PLATFORM ) || defined( CYGWIN_PLATFORM )
                                dlclose( Handle );
                        #endif

                                Handle = NULL;
                        }
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::Release( void )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::Release( void )::An error occured" ) , 1 ) );
                }
        }

Граф вызовов:

bool nitro::DynamicLibLoader::ResourceExists ( const std::string &  ResourceName  ) 

Проверка ресурса на существование.

Аргументы:
ResourceName - Имя загружаемого ресурса.
Возвращает:
true если существует.
Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 217

Перекрестные ссылки nitro::exception::code(), ResourceExists() и nitro::exception::what().

        {
                try
                {
                        return( ResourceExists( ResourceName.c_str() ) );
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::ResourceExists( const std::string & ResourceName )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::ResourceExists( const std::string & ResourceName )::An error occured" ) , 1 ) );
                }
        }

Граф вызовов:

bool nitro::DynamicLibLoader::ResourceExists ( const char *  ResourceName  ) 

Проверка ресурса на существование.

Аргументы:
ResourceName - Имя загружаемого ресурса.
Возвращает:
true если существует.
Исключения:
std::string Строка с описанием возникшей ошибки.
Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.cpp строка 177

Перекрестные ссылки nitro::exception::code(), Handle и nitro::exception::what().

Используется в nitro::PluginInterface::GetInterface(), nitro::PluginInterface::GetNewInterface(), nitro::PluginInterface::InterfaceExported(), nitro::PluginInterface::ReleaseInterface() и ResourceExists().

        {
                try
                {
                        if( Handle )
                        {
                        #if     defined( WIN32_PLATFORM ) || defined( MINGW_PLATFORM )
                                FARPROC         Address( NULL );

                                Address = GetProcAddress( *( ( HMODULE * )Handle ) , ResourceName );
                        #endif

                        #if defined( NIX_PLATFORM ) || defined( CYGWIN_PLATFORM )
                                void *                  Address( NULL );

                                Address = dlsym( Handle , ResourceName );
                        #endif

                                if( Address == NULL )
                                {
                                        return( false );
                                }

                                return( true );
                        }
                        else
                        {
                                throw( nitro::exception( std::string( "Library was not loaded" ) , 1 ) ); 
                        }
                }
                catch( nitro::exception e )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::ResourceExists( const char * ResourceName )::" ) + e.what() , e.code() ) );
                }
                catch( ... )
                {
                        throw( nitro::exception( std::string( "DynamicLibLoader::ResourceExists( const char * ResourceName )::An error occured" ) , 1 ) );
                }
        }

Граф вызовов:


Данные класса

Хэндл загруженной библиотеки.

Автор:
Додонов А.А.

См. определение в файле dynamic_lib_loader.h строка 285

Используется в DynamicLibLoader(), GetResource(), LoadLibrary(), Release() и ResourceExists().


Объявления и описания членов классов находятся в файлах:

Generated by  doxygen 1.6.1