diff options
Diffstat (limited to 'src/boost/libs/dll/example/tutorial4')
-rw-r--r-- | src/boost/libs/dll/example/tutorial4/load_self.cpp | 39 | ||||
-rw-r--r-- | src/boost/libs/dll/example/tutorial4/static_plugin.cpp | 42 | ||||
-rw-r--r-- | src/boost/libs/dll/example/tutorial4/static_plugin.hpp | 22 |
3 files changed, 103 insertions, 0 deletions
diff --git a/src/boost/libs/dll/example/tutorial4/load_self.cpp b/src/boost/libs/dll/example/tutorial4/load_self.cpp new file mode 100644 index 00000000..176bc01d --- /dev/null +++ b/src/boost/libs/dll/example/tutorial4/load_self.cpp @@ -0,0 +1,39 @@ +// Copyright 2014 Renato Tegon Forti, Antony Polukhin. +// Copyright 2015-2019 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) + +// MinGW related workaround +#define BOOST_DLL_FORCE_ALIAS_INSTANTIATION + +//[plugcpp_my_plugin_load_self +#include <boost/dll/shared_library.hpp> // for shared_library +#include <boost/dll/runtime_symbol_info.hpp> // for program_location() +#include "static_plugin.hpp" // without this headers some compilers may optimize out the `create_plugin` symbol +#include <boost/function.hpp> +#include <iostream> + +namespace dll = boost::dll; + +int main() { + dll::shared_library self(dll::program_location()); + + std::cout << "Call function" << std::endl; + boost::function<boost::shared_ptr<my_plugin_api>()> creator + = self.get_alias<boost::shared_ptr<my_plugin_api>()>("create_plugin"); + + std::cout << "Computed Value: " << creator()->calculate(2, 2) << std::endl; + //<- + { + // This block is invisible for Quickbook documentation + float res = creator()->calculate(10, 10); + if (!(res > -0.0001 && res < 0.00001)) { + throw std::runtime_error("Failed check: res > -0.0001 && res < 0.00001"); + } + } + //-> +} + +//] diff --git a/src/boost/libs/dll/example/tutorial4/static_plugin.cpp b/src/boost/libs/dll/example/tutorial4/static_plugin.cpp new file mode 100644 index 00000000..84a43774 --- /dev/null +++ b/src/boost/libs/dll/example/tutorial4/static_plugin.cpp @@ -0,0 +1,42 @@ +// Copyright 2014 Renato Tegon Forti, Antony Polukhin. +// Copyright 2015-2019 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) + +//[plugcpp_my_plugin_staic_impl +#include "static_plugin.hpp" // this is essential, BOOST_SYMBOL_ALIAS must be seen in this file + +#include <boost/make_shared.hpp> +#include <iostream> + +namespace my_namespace { + +class my_plugin_static : public my_plugin_api { +public: + my_plugin_static() { + std::cout << "Constructing my_plugin_static" << std::endl; + } + + std::string name() const { + return "static"; + } + + float calculate(float x, float y) { + return x - y; + } + + ~my_plugin_static() { + std::cout << "Destructing my_plugin_static" << std::endl; + } +}; + +boost::shared_ptr<my_plugin_api> create_plugin() { + return boost::make_shared<my_plugin_static>(); +} + +} // namespace my_namespace + +//] + diff --git a/src/boost/libs/dll/example/tutorial4/static_plugin.hpp b/src/boost/libs/dll/example/tutorial4/static_plugin.hpp new file mode 100644 index 00000000..baf93ac2 --- /dev/null +++ b/src/boost/libs/dll/example/tutorial4/static_plugin.hpp @@ -0,0 +1,22 @@ +// Copyright 2014 Renato Tegon Forti, Antony Polukhin. +// Copyright 2015-2019 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) + +//[plugcpp_my_plugin_static +#include <boost/dll/alias.hpp> // for BOOST_DLL_ALIAS +#include <boost/shared_ptr.hpp> +#include "../tutorial_common/my_plugin_api.hpp" + +namespace my_namespace { + boost::shared_ptr<my_plugin_api> create_plugin(); // Forward declaration +} // namespace my_namespace + +BOOST_DLL_ALIAS( + my_namespace::create_plugin, // <-- this function is exported with... + create_plugin // <-- ...this alias name +) +//] + |