![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Getting startedBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 11. Boost.DLL
|
Импорт (код, использующий DLL/DSL): |
Экспорт (источники DLL/DSL): |
Описание функций: |
---|---|---|
<// Importing function. autocpp11_func=dll::import<int(std::string&&)>( path_to_shared_library,"i_am_a_cpp11_function" );> | <namespacesome_namespace{ APIinti_am_a_cpp11_function(std::string&¶m)noexcept; // ^-------------------- function name to use in dll::import<> }> | |
<// Importing variable. shared_ptr<std::string>cpp_var=dll::import<std::string>( path_to_shared_library,"cpp_variable_name" );> | <namespaceyour_project_namespace{ APIstd::stringcpp_variable_name; }> | |
// Importing function by alias name auto cpp_func = dll::import_alias<std::string(const std::string&)>( path_to_shared_library, "pretty_name" );
| <namespacesome_namespace{ std::stringi_am_function_with_ugly_name(conststd::string¶m)noexcept; } // When you have no control over function sources or wish to specify another name. BOOST_DLL_ALIAS(some_namespace::i_am_function_with_ugly_name,pretty_name)> |
Безопасно использовать импортированную переменную или функцию, поскольку переменные, возвращенные из<import<T>(...)
>и<import_alias<T>(...)
>функций, содержат ссылку на общую библиотеку.
<BOOST_SYMBOL_EXPORT
>Это просто макрос от Boost. В этом случае он может быть либо<__declspec(dllexport)
>, либо<__attribute__((visibility("default")))
>. Вы можете использовать свой собственный макрос для экспорта.
![]() | Note |
---|---|
На Linux/POSIX/MacOS ссылка с библиотекой "dl". Также рекомендуется использовать флаг "-fvisibility=hidden". |
Если вам нужен низкий уровень API<boost::dll::shared_library
>, вам подойдет. Если вы хотите загрузить библиотеку, просто создайте этот класс с помощью пути к библиотеке в качестве параметра:
boost::dll::shared_library lib("/test/boost/application/libtest_library.so");
Теперь вы можете легко импортировать символы из этой библиотеки, используя функции<get
>и<get_alias
>:
int plugin_constant = lib.get<const int>("integer_variable"); boost::function<int()> f = lib.get<int()>("function_returning_int"); int& i = lib.get_alias<int>("alias_to_int_variable");
В случае<boost::dll::shared_library
>безопасно использовать импортные символы только до тех пор, пока<boost::dll::shared_library
>экземпляр не будет уничтожен.
Запросите библиотеки с использованием<boost::dll::library_info
>и получите информацию о символах с использованием<boost::dll::symbol_location
>,<boost::dll::this_line_location
>и<boost::dll::program_location
>.
Статья Getting started раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 11. Boost.DLL может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 11. Boost.DLL ::
реклама |