1 // Copyright 2014 Renato Tegon Forti, Antony Polukhin. 2 // Copyright 2015-2019 Antony Polukhin. 3 // 4 // Distributed under the Boost Software License, Version 1.0. 5 // (See accompanying file LICENSE_1_0.txt 6 // or copy at http://www.boost.org/LICENSE_1_0.txt) 7 8 // MinGW related workaround 9 #define BOOST_DLL_FORCE_ALIAS_INSTANTIATION 10 11 //[plugcpp_my_plugin_load_self 12 #include <boost/dll/shared_library.hpp> // for shared_library 13 #include <boost/dll/runtime_symbol_info.hpp> // for program_location() 14 #include "static_plugin.hpp" // without this headers some compilers may optimize out the `create_plugin` symbol 15 #include <boost/function.hpp> 16 #include <iostream> 17 18 namespace dll = boost::dll; 19 main()20int main() { 21 dll::shared_library self(dll::program_location()); 22 23 std::cout << "Call function" << std::endl; 24 boost::function<boost::shared_ptr<my_plugin_api>()> creator 25 = self.get_alias<boost::shared_ptr<my_plugin_api>()>("create_plugin"); 26 27 std::cout << "Computed Value: " << creator()->calculate(2, 2) << std::endl; 28 //<- 29 { 30 // This block is invisible for Quickbook documentation 31 float res = creator()->calculate(10, 10); 32 if (!(res > -0.0001 && res < 0.00001)) { 33 throw std::runtime_error("Failed check: res > -0.0001 && res < 0.00001"); 34 } 35 } 36 //-> 37 } 38 39 //] 40