|  | 
|      | 
|  | 
| 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]](/img/note.png) | 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 ::
| реклама |