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

Getting started

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 11. Boost.DLL

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

Повышаю. DLL - это библиотека только для заголовков. Для начала в библиотеку нужно включить только заголовок<<boost/dll.hpp>>. После этого вы можете свободно импортировать и экспортировать функции и переменные. Импорт кода требует соединения с библиотеками<boost_filesystem>и<boost_system>.

using namespace boost;
// `extern "C"` - specifies C linkage: forces the compiler to export function/variable by a pretty (unmangled) C name.
#define API extern "C" BOOST_SYMBOL_EXPORT

Импорт (код, использующий 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&&param)noexcept;
//          ^--------------------  function name to use in dll::import<>
}
>

<import<T>(...)>

<
// 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;
}
>

<import<T>(...)>

// 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&param)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_alias<T>(...)>

<BOOST_DLL_ALIAS>

Безопасно использовать импортированную переменную или функцию, поскольку переменные, возвращенные из<import<T>(...)>и<import_alias<T>(...)>функций, содержат ссылку на общую библиотеку.

<BOOST_SYMBOL_EXPORT>Это просто макрос от Boost. В этом случае он может быть либо<__declspec(dllexport)>, либо<__attribute__((visibility("default")))>. Вы можете использовать свой собственный макрос для экспорта.

[Note]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>.


PrevUpHomeNext

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




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



:: Главная :: Chapter 11. Boost.DLL ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:40:42/0.0088181495666504/1