Function import_alias
boost::dll::import_alias
Synopsis
template<typename T>
result_type import_alias(const boost::filesystem::path & lib,
const char * name,
load_mode::type mode = load_mode::default_mode);
template<typename T>
result_type import_alias(const boost::filesystem::path & lib,
const std::string & name,
load_mode::type mode = load_mode::default_mode);
template<typename T>
result_type import_alias(const shared_library & lib, const char * name);
template<typename T>
result_type import_alias(const shared_library & lib,
const std::string & name);
template<typename T>
result_type import_alias(shared_library && lib, const char * name);
template<typename T>
result_type import_alias(shared_library && lib, const std::string & name);
Description
Возвращает позывной объект или усилитель::shared_ptr который содержит символ, импортированный из загруженной библиотеки. Возвращенное значение пересчитывает использование загруженной общей библиотеки, так что она не будет разгружена, пока все копии обратного значения не будут уничтожены.
Этот вызов будет успешным, если вызов boost::dll::shared_library::has(const char*)
функции с тем же именем символа вернулся true
.
Для импорта символов по non alias используют метод boost::dll::import.
Примеры:
boost::function<int(int)> f = import_alias<int(int)>("test_lib.so", "integer_func_alias_name");
auto f_cpp11 = import_alias<int(int)>("test_lib.so", "integer_func_alias_name");
boost::shared_ptr<int> i = import_alias<int>("test_lib.so", "integer_alias_name");
TemplateпараметрT: Тип символа псевдонима, который мы собираемся импортировать. Должен быть четко указан.
Параметры: |
lib
|
Путь к общей библиотеке или к общей библиотеке для загрузки функции. |
режим
|
Режим, который будет использоваться при загрузке библиотеки. |
name
|
Нулевое C или C++ искалеченное имя функции или переменной для импорта. Может обрабатывать std::string, char*, const char*. |
|
Возврат: |
вызывающий объект, если T - тип функции, или усилитель::shared_ptr< T> если T — тип объекта. |
Броски: |
усиление::system::system_error, если символ не существует или если DLL/DSO не был загружен. Перегрузка, которая принимает путь, также бросает std::bad_alloc в случае недостаточной памяти. |