Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Class smart_library

boost::dll::experimental::smart_library — This class is an extension of shared_library, which allows to load C++ symbols.

Synopsis

// In header: <boost/dll/smart_library.hpp>


class smart_library {
public:
  // types
  typedef  ;

  // construct/copy/destruct
  () ;
  (,  = );
  (, , 
                 = );
  (, , 
                );
  (smart_library &) ;
  (smart_library &&) ;
  (shared_library &) ;
  (shared_library &&) ;
  ~();

  // public member functions
  shared_library & () ;
   () ;
   ();
   (,  = );
   (, , 
             = );
   (, , 
            );
  template<typename T>  () ;
  template<typename Func>  () ;
  template<typename Class, typename Func> 
     () ;
  template<typename Signature> 
     () ;
  template<typename Class>  () ;
  template<typename Class>  () ;
  template<typename Alias>  ();
   () ;
   () ;
   () ;
  () ;
   () ;
   () ;
  smart_library & (smart_library &);
   (smart_library &) ;
};

Description

This class allows type safe loading of overloaded functions, member-functions, constructors and variables. It also allows to overwrite classes so they can be loaded, while being declared with different names.

[Warning] Warning

Is still very experimental.

Currently known limitations:

Member functions must be defined outside of the class to be exported. That is:

//not exported:

With the current analysis, the first version does get exported in MSVC. MinGW also does export it, BOOST_SYMBOL_EXPORT is written before it. To allow this on windows one can use BOOST_DLL_MEMBER_EXPORT for this, so that MinGW and MSVC can provide those functions. This does however not work with gcc on linux.

Direct initialization of members. On linux the following member variable i will not be initialized when using the allocating constructor:

This does however not happen when the value is set inside the constructor function.

smart_library public construct/copy/destruct

  1. () ;

    Creates in anstance that does not reference any DLL/DSO.

    Postconditions:

    this->is_loaded() returns false.

    Throws:

    Nothing.
  2. ( lib_path,  mode = );

    Loads a library by specified path with a specified mode.

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link>, std::bad_alloc in case of insufficient memory.

    Parameters:

    lib_path

    Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or boost::dll::fs::path.

    mode

    A mode that will be used on library load.

    Throws:

  3. ( lib_path, 
                   ec,  mode = );

    Loads a library by specified path with a specified mode.

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    Parameters:

    ec

    Variable that will be set to the result of the operation.

    lib_path

    Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or boost::dll::fs::path.

    mode

    A mode that will be used on library load.

    Throws:

    std::bad_alloc in case of insufficient memory.
  4. ( lib_path,  mode, 
                   ec);
  5. (smart_library & lib) ;

    copy a smart_library object.

    Parameters:

    lib

    A smart_library to move from.

    Throws:

    Nothing.
  6. (smart_library && lib) ;

    Move a smart_library object.

    Parameters:

    lib

    A smart_library to move from.

    Throws:

    Nothing.
  7. (shared_library & lib) ;

    Construct from a shared_library object.

    Parameters:

    lib

    A shared_library to move from.

    Throws:

    Nothing.
  8. (shared_library && lib) ;

    Construct from a shared_library object.

    Parameters:

    lib

    A shared_library to move from.

    Throws:

    Nothing.
  9. ~();

    Destroys the smart_library. unload() is called if the DLL/DSO was loaded. If library was loaded multiple times by different instances of shared_library, the actual DLL/DSO won't be unloaded until there is at least one instance of shared_library.

    Throws:

    Nothing.

smart_library public member functions

  1. shared_library & () ;

    Get the underlying shared_library

  2.  () ;

    Access to the mangled storage, which is created on construction.

    Throws:

    Nothing.
  3.  ();
    Overload, for current development.
  4.  ( lib_path,  mode = );

    Loads a library by specified path with a specified mode.

    Note that if some library is already loaded in this instance, load will call unload() and then load the new provided library.

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link>, std::bad_alloc in case of insufficient memory.

    Parameters:

    lib_path

    Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or boost::dll::fs::path.

    mode

    A mode that will be used on library load.

    Throws:

  5.  ( lib_path, 
               ec,  mode = );

    Loads a library by specified path with a specified mode.

    Note that if some library is already loaded in this instance, load will call unload() and then load the new provided library.

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    Parameters:

    ec

    Variable that will be set to the result of the operation.

    lib_path

    Library file name. Can handle std::string, const char*, std::wstring, const wchar_t* or boost::dll::fs::path.

    mode

    A mode that will be used on library load.

    Throws:

    std::bad_alloc in case of insufficient memory.
  6.  ( lib_path,  mode, 
               ec);
  7. template<typename T>  ( name) ;

    Load a variable from the referenced library.

    Unlinke shared_library::get this function will also load scoped variables, which also includes static class members.

    [Note] Note

    When mangled, MSVC will also check the type.

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link> if symbol does not exist or if the DLL/DSO was not loaded.

    Parameters:

    name

    Name of the variable

    Template Parameters:

    T

    Type of the variable

    Returns:

    A reference to the variable of type T.

    Throws:

  8. template<typename Func>  ( name) ;

    Load a function from the referenced library.

    Example:

    [Note] Note

    When mangled, MSVC will also check the return type.

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link> if symbol does not exist or if the DLL/DSO was not loaded.

    Parameters:

    name

    Name of the function.

    Template Parameters:

    Func

    Type of the function, required for determining the overload

    Returns:

    A reference to the function of type F.

    Throws:

  9. template<typename Class, typename Func> 
       ( name) ;

    Load a member-function from the referenced library.

    Example (import class is MyClass, which is available inside the library and the host):

    [Note] Note

    When mangled, MSVC will also check the return type.

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link> if symbol does not exist or if the DLL/DSO was not loaded.

    Parameters:

    name

    Name of the function.

    Template Parameters:

    Class

    The class the function is a member of. If Class is const, the function will be assumed as taking a const this-pointer. The same applies for volatile.

    Func

    Signature of the function, required for determining the overload

    Returns:

    A pointer to the member-function with the signature provided

    Throws:

  10. template<typename Signature>  () ;

    Load a constructor from the referenced library.

    Example (import class is MyClass, which is available inside the library and the host):

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link> if symbol does not exist or if the DLL/DSO was not loaded.

    Template Parameters:

    Signature

    Signature of the function, required for determining the overload. The return type is the class which this is the constructor of.

    Returns:

    A constructor object.

    Throws:

  11. template<typename Class>  () ;

    Load a destructor from the referenced library.

    Example (import class is MyClass, which is available inside the library and the host):

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link> if symbol does not exist or if the DLL/DSO was not loaded.

    Template Parameters:

    Class

    The class whose destructor shall be loaded

    Returns:

    A destructor object.

    Throws:

  12. template<typename Class>  () ;

    Load the typeinfo of the given type.

    Example (import class is MyClass, which is available inside the library and the host):

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link> if symbol does not exist or if the DLL/DSO was not loaded.

    Template Parameters:

    Class

    The class whose typeinfo shall be loaded

    Returns:

    A reference to a type_info object.

    Throws:

  13. template<typename Alias>  ( name);

    This function can be used to add a type alias.

    This is to be used, when a class shall be imported, which is not declared on the host side.

    Example:

    [Note] Note

    If the alias-type is not large enough for the imported class, it will result in undefined behaviour.

    [Warning] Warning

    The alias will only be applied for the type signature, it will not replace the token in the scoped name.

    Parameters:

    name

    Name of the class the alias is for.

  14.  () ;

    Unloads a shared library. If library was loaded multiple times by different instances, the actual DLL/DSO won't be unloaded until there is at least one instance that references the DLL/DSO.

    Postconditions:

    this->is_loaded() returns false.

    Throws:

    Nothing.
  15.  () ;

    Check if an library is loaded.

    Returns:

    true if a library has been loaded.

    Throws:

    Nothing.
  16.  () ;

    Check if an library is not loaded.

    Returns:

    true if a library has not been loaded.

    Throws:

    Nothing.
  17. () ;
    bool() const

    bool() const

  18.  ( symbol_name) ;

    Search for a given symbol on loaded library. Works for all symbols, including alias names.

    This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

    Parameters:

    symbol_name

    Null-terminated symbol name. Can handle std::string, char*, const char*.

    Returns:

    true if the loaded library contains a symbol with a given name.

    Throws:

    Nothing.
  19.  ( symbol_name) ;
  20. smart_library & (smart_library & lib);

    Makes *this share the same shared object as lib. If *this is loaded, then unloads it.

    xmlonly <link linkend='boost.dll.fs.system_error'>boost::dll::fs::system_error</link>, std::bad_alloc in case of insufficient memory.

    Parameters:

    lib

    A library instance to assign from.

    Postconditions:

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

    Throws:

  21.  (smart_library & rhs) ;

    Swaps two libraries. Does not invalidate existing symbols and functions loaded from libraries.

    Parameters:

    rhs

    Library to swap with.

    Throws:

    Nothing.

PrevUpHomeNext