Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Class shared_library

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Reference

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Class shared_library

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>

class shared_library {
public:
  // types
  typedef platform_specific native_handle_t;
  // construct/copy/destruct
  shared_library() noexcept;
  shared_library(const shared_library &);
  shared_library(const shared_library &, boost::system::error_code &);
  shared_library(shared_library &&) noexcept;
  explicit shared_library(const boost::filesystem::path &, 
                          load_mode::type = load_mode::default_mode);
  shared_library(const boost::filesystem::path &, boost::system::error_code &, 
                 load_mode::type = load_mode::default_mode);
  shared_library(const boost::filesystem::path &, load_mode::type, 
                 boost::system::error_code &);
  shared_library & operator=(const shared_library &);
  shared_library & operator=(shared_library &&) noexcept;
  ~shared_library();
  // public member functions
  shared_library & assign(const shared_library &, boost::system::error_code &);
  shared_library & assign(const shared_library &);
  void load(const boost::filesystem::path &, 
            load_mode::type = load_mode::default_mode);
  void load(const boost::filesystem::path &, boost::system::error_code &, 
            load_mode::type = load_mode::default_mode);
  void load(const boost::filesystem::path &, load_mode::type, 
            boost::system::error_code &);
  void unload() noexcept;
  bool is_loaded() const noexcept;
  bool operator!() const noexcept;
  explicit operator bool() const noexcept;
  bool has(const char *) const noexcept;
  bool has(const std::string &) const noexcept;
  template<typename T> 
    boost::enable_if_c< boost::is_member_pointer< T >::value||boost::is_reference< T >::value, T >::type 
    get(const std::string &) const;
  template<typename T> 
    boost::disable_if_c< boost::is_member_pointer< T >::value||boost::is_reference< T >::value, T & >::type 
    get(const std::string &) const;
  template<typename T> 
    boost::enable_if_c< boost::is_member_pointer< T >::value||boost::is_reference< T >::value, T >::type 
    get(const char *) const;
  template<typename T> 
    boost::disable_if_c< boost::is_member_pointer< T >::value||boost::is_reference< T >::value, T & >::type 
    get(const char *) const;
  template<typename T> T & get_alias(const char *) const;
  template<typename T> T & get_alias(const std::string &) const;
  native_handle_t native() const noexcept;
  boost::filesystem::path location() const;
  boost::filesystem::path location(boost::system::error_code &) const;
  void swap(shared_library &) noexcept;
  // public static functions
  static boost::filesystem::path suffix();
};

Description

Shared_libraryэкземпляры имеют общее количество ссылок на фактически загруженный DLL/DSO, поэтому безопасно и эффективно использовать память для нескольких экземпляровshared_library.ссылаясь на один и тот же DLL/DSO, даже если эти экземпляры были загружены с использованием разных путей (относительно + абсолютно), ссылаясь на один и тот же объект.

На Linux/POSIX ссылка с библиотечным "dl". "-fvisibility=hidden" флаг также рекомендуется для использования на Linux/POSIX.

shared_library public construct/copy/destruct

  1. <
    shared_library()noexcept;
    >

    Создает устройство, которое не ссылается на DLL/DSO.

    Пост-условия:

    это->is_loaded() возвращается ложным.

    Броски:

    Ничего.
  2. <
    shared_library(constshared_library&lib);
    >

    Создатель копий, который увеличивает количество ссылок на базовую общую библиотеку. То же самое, что вызвать конструктора с<lib.location()>параметром.

    Параметры:

    <lib>

    Пост-условия:

    Броски:

    <lib>

    Библиотека для копирования.

    lib == *это

    повышают::system::system_error в случае недостаточной памяти.
  3. <
    shared_library(constshared_library&lib,boost::system::error_code&ec);
    >

    Скопируйте конструктор, который увеличивает количество ссылок на базовую общую библиотеку. То же самое, что вызывать конструктор с<lib.location(), ec>параметрами.

    Броски:

    Параметры:

    <ec>

    Переменная, которая будет установлена на результат операции.

    <lib>

    Общая библиотека для копирования.

    Постусловия:

    lib == *это

    Броски:

    std::bad_alloc в случае недостаточной памяти.
  4. <
    shared_library(shared_library&&lib)noexcept;
    >

    Переместить конструктор. Не обесценивает существующие символы и функции, загруженные из lib.

    [[[]] [[[]] [[[]] [[]] [[[]] [[]] [[]] [[[]] [[]] [[]] [[]] [[]] [[]] [[]] [[ Постусловия:

    Броски:

    Общая библиотека для перемещения из

    lib.is_loaded() возвращает ложное, это->is_loaded() возвращает истинное.

    Ничего.
  5. <
    explicitshared_library(constboost::filesystem::path&lib_path,
                           load_mode::typemode=load_mode::default_mode);
    >

    Загружает библиотеку указанным путем с заданным режимом.

    Параметры:

    <mode><mode>

    <lib_path>

    Файл библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path.

    Режим, который будет использоваться на библиотечной нагрузке.

  6. надбавка::system::system_error в случае недостаточной памяти.
  7. <
    shared_library(constboost::filesystem::path&lib_path,
                  boost::system::error_code&ec,
                  load_mode::typemode=load_mode::default_mode);
    >

    Загружает библиотеку по заданному пути с заданным режимом.

    Параметры:

    <ec>

    Переменная, которая будет установлена на результат операции.

    <lib_path>

    Файл библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path.

    <mode>

    Режим, который будет использоваться на библиотечной нагрузке.

    Броски:

    std::bad_alloc в случае недостаточной памяти.
  8. <
    shared_library(constboost::filesystem::path&lib_path,load_mode::typemode,
                  boost::system::error_code&ec);
    >

    Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

  9. <
    shared_library&operator=(constshared_library&lib);
    >

    Оператор передачи. Если это->is_loaded(), то это->unload(). Не обесценивает существующие символы и функции, загруженные из lib.

    Параметры:

    <lib>

    Общая библиотека для присвоения из

    Постусловия:

    lib == *это

    Броски:

    повышают::system::system_error в случае недостаточной памяти.
  10. <
    shared_library&operator=(shared_library&&lib)noexcept;
    >

    Переместить оператора назначения. Если это->is_loaded(), то это->unload(). Не обесценивает существующие символы и функции, загруженные из lib.

    Параметры:

    <lib>

    Библиотека для перемещения из.

    Постусловия:

    lib.is_loaded() возвращает ложные.

    Броски:

    Ничего.
  11. <
    ~shared_library();
    >

    Уничтожает объект, позвонив<unload()>. Если библиотека была загружена несколько раз различными экземплярами, фактическая DLL/DSO не будет выгружена, пока не будет по крайней мере один экземпляр, который ссылается на DLL/DSO.

    Броски:

  12. shared_library public member functions

    1. <
      shared_library&
      assign(constshared_library&lib,boost::system::error_code&ec);
      >

      Делает эту долю тем же общим объектом, что и lib. Если * это загружено, то выгружает его.

      Параметры:

      <ec>

      Переменная, которая будет установлена на результат операции.

      <lib>

      Библиотека для копирования.

      Постусловия:

      lib.location() == this->location(), lib == *this

      Броски:

      std::bad_alloc в случае недостаточной памяти.
    2. <
      shared_library&assign(constshared_library&lib);
      >

      Делает эту долю тем же общим объектом, что и lib. Если *это загружено, то выгружает его.

      Пост-условия:

      Параметры:

      Библиотечный экземпляр для присвоения из.

      lib.location() == это->location()

      Броски:

      повышают::system::system_error в случае недостаточной памяти.
    3. <
      voidload(constboost::filesystem::path&lib_path,
               load_mode::typemode=load_mode::default_mode);
      >

      Загружает библиотеку указанным путем с заданным режимом.

      Обратите внимание, что если какая-либо библиотека уже загружена в этом случае, загрузка вызовет разгрузку (), а затем загрузит новую предоставленную библиотеку.

      Параметры:

      <

      voidload(constboost::filesystem::path&lib_path,
               load_mode::typemode=load_mode::default_mode);
      >

      [

      [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [

      ] [[

      Файл библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path.

      <

      voidload(constboost::filesystem::path&lib_path,
               load_mode::typemode=load_mode::default_mode);
      >

      Режим, который будет использоваться при загрузке библиотеки.

      Броски:

      повышают::system::system_error в случае недостаточной памяти.
    4. <
      voidload(constboost::filesystem::path&lib_path,
               boost::system::error_code&ec,
               load_mode::typemode=load_mode::default_mode);
      >

      Загружает библиотеку указанным путем с заданным режимом.

      Обратите внимание, что если какая-либо библиотека уже загружена в этом случае, загрузка вызовет разгрузку (), а затем загрузит новую предоставленную библиотеку.

      Параметры:

      <ec>

      Переменная, которая будет установлена на результат операции.

      <lib_path>

      Название файла библиотеки. Может обрабатывать std::string, const char*, std::wstring, const wchar_t* или boost::filesystem::path.

      <mode>

      Режим, который будет использоваться на библиотечной нагрузке.

      std::bad_alloc в случае недостаточной памяти.
    5. <
      voidload(constboost::filesystem::path&lib_path,load_mode::typemode,
               boost::system::error_code&ec);
      >

      Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

    6. <
      voidunload()noexcept;
      >

      Разгружает общую библиотеку. Если библиотека была загружена несколько раз различными экземплярами, фактическая DLL/DSO не будет разгружена, пока не будет по крайней мере один экземпляр, который ссылается на DLL/DSO.

      это->is_loaded() возвращает ложное.

      Бросок:

      Пост-условия:

      Ничего.
    7. <
      boolis_loaded()constnoexcept;
      >

      Проверьте, загружена ли библиотека.

      Возврат:

      верно, если библиотека была загружена.

      Броски:

      Ничего.
    8. <
      booloperator!()constnoexcept;
      >

      Проверьте, не загружена ли библиотека.

      истинно, если библиотека не была загружена.

      Броски:

      Ничего.
    9. <
      explicitoperatorbool()constnoexcept;
      >

      Проверьте, загружена ли библиотека.

      Возвращает:

      верно, если библиотека была загружена.

      Броски:

      Ничего.
    10. <
      boolhas(constchar*symbol_name)constnoexcept;
      >

      Поиск заданного символа в загруженной библиотеке. Работает для всех символов, включая имена псевдонимов.

      Параметры:

      <symbol_name>

      Название символа с нулевым окончанием. Может обрабатывать std::string, char*, const char*.

      Возврат:

      <true>, если загруженная библиотека содержит символ с заданным именем.

      Броски:

      Ничего.
    11. <
      boolhas(conststd::string&symbol_name)constnoexcept;
      >

      Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

    12. <
      template<typenameT>
       boost::enable_if_c<boost::is_member_pointer<T>::value||boost::is_reference<T>::value,T>::type
       get(conststd::string&symbol_name)const;
      >

      Возвращает ссылку на символ (функцию или переменную) с заданным именем из загруженной библиотеки. Этот вызов всегда будет удачным и ничего не бросит, если вызов на<has(const char* )>членскую функцию с тем же именем символа вернется<true>.

      Пример:

      <
      int&i0=lib.get<int>("integer_name");
      int&i1=*lib.get<int*>("integer_alias_name");
      
      >

      Параметры:

      <symbol_name>

      Название символа с нулевым окончанием. Может обрабатывать стд::струны, char*, const char*.

      Параметры шаблонов:

      Тип символа, который мы собираемся импортировать. Должен быть четко указан.

      Возвращение:

      Ссылка на символ.

      Броски:

      Повышение::system::system_error, если символ не существует или если DLL/DSO не был загружен.
  13. <
    template<typenameT>
     boost::disable_if_c<boost::is_member_pointer<T>::value||boost::is_reference<T>::value,T&>::type
     get(conststd::string&symbol_name)const;
    >

    Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

  14. <
    template<typenameT>
     boost::enable_if_c<boost::is_member_pointer<T>::value||boost::is_reference<T>::value,T>::type
     get(constchar*symbol_name)const;
    >

    Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

  15. <
    template<typenameT>
     boost::disable_if_c<boost::is_member_pointer<T>::value||boost::is_reference<T>::value,T&>::type
     get(constchar*symbol_name)const;
    >

    Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

  16. <
    template<typenameT>T&get_alias(constchar*alias_name)const;
    >

    Возвращает символ (функцию или переменную) из общей библиотеки псевдонимом символа.

    Пример:

    <
    int&i=lib.get_alias<int>("integer_alias_name");
    
    >

    <T>

    Тип символа, который мы собираемся импортировать. Должны быть четко указаны.

    Параметры:

    <alias_name>

    Полное имя символа псевдонима. Может обрабатывать std::string, char*, const char*.

    Параметры шаблонов:

  17. Броски:

    повышают::system::system_error, если символ не существует или если DLL/DSO не был загружен.
  18. <
    template<typenameT>T&get_alias(conststd::string&alias_name)const;
    >

    Это перегруженная функция члена, предусмотренная для удобства. Он отличается от вышеуказанной функции только тем, какие аргументы он принимает.

  19. <
    native_handle_tnative()constnoexcept;
    >

    Возвращает родной хранитель загруженной библиотеки.

    Возвращение:

    Конкретная для платформы ручка

  20. <
    boost::filesystem::pathlocation()const;
    >

    Возвращает полный путь и название этого общего объекта.

    Пример:

    <
    shared_librarylib("test_lib.dll");
    filesystem::pathfull_path=lib.location();// C:\Windows\System32\test_lib.dll
    
    >

    Возврат:

    Полный путь к общей библиотеке.

    Броски:

    повышение::система::система_ошибка
  21. <
    boost::filesystem::pathlocation(boost::system::error_code&ec)const;
    >

    Возвращает полный путь и название разделяемого модуля.

    Пример:

    <
    shared_librarylib("test_lib.dll");
    filesystem::pathfull_path=lib.location();// C:\Windows\System32\test_lib.dll
    
    >

    Параметры:

    <ec>

    Переменная, которая будет установлена на результат операции.

    Возвращение:

    Полный путь к общей библиотеке.

    Броски:

    std::bad_alloc.
  22. <
    voidswap(shared_library&rhs)noexcept;
    >

    Обменяет две библиотеки. Не отменяет существующие символы и функции, загруженные из библиотек.

    [1599]
    [

    [] []

    Ничего.

    shared_library public static functions

    1. <
      staticboost::filesystem::pathsuffix();
      >

      Возвращает суффикс разделяемого модуля: в вызове к нагрузке() или конструктору/нагрузке.

      Возвращение:

      Модуль суффикса: ".dll" (Windows), ".so" (Unix/Linux/BSD), ".dylib" (MacOS/IOS)


    PrevUpHomeNext

    Статья Class shared_library раздела The Boost C++ Libraries BoostBook Documentation Subset Reference может быть полезна для разработчиков на c++ и boost.




    Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



    :: Главная :: Reference ::


    реклама


    ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
    Top.Mail.Ru

    Время компиляции файла: 2024-08-30 11:47:00
    2025-05-20 09:40:56/0.010335922241211/0