boost::dll::shared_library — This class can be used to load a Dynamic link libraries (DLL's) or Shared Libraries, also know as dynamic shared objects (DSO's) and get their exported symbols (functions and variables).
Synopsis
// In header: <boost/dll/shared_library.hpp>
classshared_library{public:// typestypedefplatform_specificnative_handle_t;// construct/copy/destructshared_library()noexcept;shared_library(constshared_library&);shared_library(constshared_library&,boost::system::error_code&);shared_library(shared_library&&)noexcept;explicitshared_library(constboost::filesystem::path&,load_mode::type=load_mode::default_mode);shared_library(constboost::filesystem::path&,boost::system::error_code&,load_mode::type=load_mode::default_mode);shared_library(constboost::filesystem::path&,load_mode::type,boost::system::error_code&);shared_library&operator=(constshared_library&);shared_library&operator=(shared_library&&)noexcept;~shared_library();// public member functionsshared_library&assign(constshared_library&,boost::system::error_code&);shared_library&assign(constshared_library&);voidload(constboost::filesystem::path&,load_mode::type=load_mode::default_mode);voidload(constboost::filesystem::path&,boost::system::error_code&,load_mode::type=load_mode::default_mode);voidload(constboost::filesystem::path&,load_mode::type,boost::system::error_code&);voidunload()noexcept;boolis_loaded()constnoexcept;booloperator!()constnoexcept;explicitoperatorbool()constnoexcept;boolhas(constchar*)constnoexcept;boolhas(conststd::string&)constnoexcept;template<typename T>boost::enable_if_c<boost::is_member_pointer<T>::value||boost::is_reference<T>::value,T>::typeget(conststd::string&)const;template<typename T>boost::disable_if_c<boost::is_member_pointer<T>::value||boost::is_reference<T>::value,T&>::typeget(conststd::string&)const;template<typename T>boost::enable_if_c<boost::is_member_pointer<T>::value||boost::is_reference<T>::value,T>::typeget(constchar*)const;template<typename T>boost::disable_if_c<boost::is_member_pointer<T>::value||boost::is_reference<T>::value,T&>::typeget(constchar*)const;template<typename T>T&get_alias(constchar*)const;template<typename T>T&get_alias(conststd::string&)const;native_handle_tnative()constnoexcept;boost::filesystem::pathlocation()const;boost::filesystem::pathlocation(boost::system::error_code&)const;voidswap(shared_library&)noexcept;// public static functionsstaticboost::filesystem::pathsuffix();};
Description
Shared_libraryэкземпляры имеют общее количество ссылок на фактически загруженный DLL/DSO, поэтому безопасно и эффективно использовать память для нескольких экземпляровshared_library.ссылаясь на один и тот же DLL/DSO, даже если эти экземпляры были загружены с использованием разных путей (относительно + абсолютно), ссылаясь на один и тот же объект.
На Linux/POSIX ссылка с библиотечным "dl". "-fvisibility=hidden" флаг также рекомендуется для использования на Linux/POSIX.
shared_library
public
construct/copy/destruct
<
shared_library()noexcept;
>
Создает устройство, которое не ссылается на DLL/DSO.
Скопируйте конструктор, который увеличивает количество ссылок на базовую общую библиотеку. То же самое, что вызывать конструктор с<lib.location(), ec>параметрами.
Параметры:
<ec>
Переменная, которая будет установлена на результат операции.
Переместить оператора назначения. Если это->is_loaded(), то это->unload(). Не обесценивает существующие символы и функции, загруженные из lib.
Параметры:
<lib>
Библиотека для перемещения из.
Постусловия:
lib.is_loaded() возвращает ложные.
Броски:
Ничего.
<
~shared_library();
>
Уничтожает объект, позвонив<unload()>. Если библиотека была загружена несколько раз различными экземплярами, фактическая DLL/DSO не будет выгружена, пока не будет по крайней мере один экземпляр, который ссылается на DLL/DSO.
Загружает библиотеку указанным путем с заданным режимом.
Обратите внимание, что если какая-либо библиотека уже загружена в этом случае, загрузка вызовет разгрузку (), а затем загрузит новую предоставленную библиотеку.
Загружает библиотеку указанным путем с заданным режимом.
Обратите внимание, что если какая-либо библиотека уже загружена в этом случае, загрузка вызовет разгрузку (), а затем загрузит новую предоставленную библиотеку.
Параметры:
<ec>
Переменная, которая будет установлена на результат операции.
<lib_path>
Название файла библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path.
<mode>
Режим, который будет использоваться на библиотечной нагрузке.
Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.
<
voidunload()noexcept;
>
Разгружает общую библиотеку. Если библиотека была загружена несколько раз различными экземплярами, фактическая DLL/DSO не будет разгружена, пока не будет по крайней мере один экземпляр, который ссылается на DLL/DSO.
Пост-условия:
это->is_loaded() возвращает ложное.
Бросок:
Ничего.
<
boolis_loaded()constnoexcept;
>
Проверьте, загружена ли библиотека.
Возврат:
верно, если библиотека была загружена.
Броски:
Ничего.
<
booloperator!()constnoexcept;
>
Проверьте, не загружена ли библиотека.
истинно, если библиотека не была загружена.
Броски:
Ничего.
<
explicitoperatorbool()constnoexcept;
>
Проверьте, загружена ли библиотека.
Возвращает:
верно, если библиотека была загружена.
Броски:
Ничего.
<
boolhas(constchar*symbol_name)constnoexcept;
>
Поиск заданного символа в загруженной библиотеке. Работает для всех символов, включая имена псевдонимов.
Параметры:
<symbol_name>
Название символа с нулевым окончанием. Может обрабатывать std::string, char*, const char*.
Возврат:
<true>, если загруженная библиотека содержит символ с заданным именем.
Возвращает ссылку на символ (функцию или переменную) с заданным именем из загруженной библиотеки. Этот вызов всегда будет удачным и ничего не бросит, если вызов на<has(const char* )>членскую функцию с тем же именем символа вернется<true>.
Статья Class shared_library раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.