summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/dll/example/tutorial4
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/dll/example/tutorial4')
-rw-r--r--src/boost/libs/dll/example/tutorial4/load_self.cpp39
-rw-r--r--src/boost/libs/dll/example/tutorial4/static_plugin.cpp42
-rw-r--r--src/boost/libs/dll/example/tutorial4/static_plugin.hpp22
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
+)
+//]
+