// Copyright 2014 Renato Tegon Forti, Antony Polukhin. // Copyright 2015 Antony Polukhin. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) //[callplugcpp_tutorial3 #include // for import_alias #include #include #include "../tutorial_common/my_plugin_api.hpp" namespace dll = boost::dll; std::size_t search_for_symbols(const std::vector& plugins) { std::size_t plugins_found = 0; boost::shared_ptr lib = boost::make_shared(); for (std::size_t i = 0; i < plugins.size(); ++i) { std::cout << "Loading plugin: " << plugins[i] << '\n'; lib->load(plugins[i], dll::load_mode::append_decorations); if (!lib->has("create_plugin")) { // no such symbol continue; } // library has symbol, importing... typedef boost::shared_ptr (pluginapi_create_t)(); boost::function creator = dll::import_alias(lib, "create_plugin"); std::cout << "Matching plugin name: " << creator()->name() << std::endl; ++ plugins_found; } return plugins_found; } //] int main(int argc, char* argv[]) { BOOST_ASSERT(argc >= 3); std::vector plugins; plugins.reserve(argc - 1); for (int i = 1; i < argc; ++i) { plugins.push_back(argv[i]); } const std::size_t res = search_for_symbols(plugins); BOOST_ASSERT(res == 1); }