summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/dll/example/tutorial7
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/dll/example/tutorial7')
-rw-r--r--src/boost/libs/dll/example/tutorial7/library1.cpp21
-rw-r--r--src/boost/libs/dll/example/tutorial7/library2.cpp26
-rw-r--r--src/boost/libs/dll/example/tutorial7/tutorial7.cpp48
3 files changed, 95 insertions, 0 deletions
diff --git a/src/boost/libs/dll/example/tutorial7/library1.cpp b/src/boost/libs/dll/example/tutorial7/library1.cpp
new file mode 100644
index 00000000..fa48a5da
--- /dev/null
+++ b/src/boost/libs/dll/example/tutorial7/library1.cpp
@@ -0,0 +1,21 @@
+// 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_tutorial7_library1
+#include <boost/dll/alias.hpp> // for BOOST_DLL_ALIAS_SECTIONED
+#include <iostream>
+#include <string>
+
+void print(const std::string& s) {
+ std::cout << "Hello, " << s << '!' << std::endl;
+}
+
+BOOST_DLL_ALIAS_SECTIONED(print, print_hello, Anna)
+//]
diff --git a/src/boost/libs/dll/example/tutorial7/library2.cpp b/src/boost/libs/dll/example/tutorial7/library2.cpp
new file mode 100644
index 00000000..abdd60ff
--- /dev/null
+++ b/src/boost/libs/dll/example/tutorial7/library2.cpp
@@ -0,0 +1,26 @@
+// 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_tutorial7_library2
+#include <boost/dll/alias.hpp> // for BOOST_DLL_ALIAS_SECTIONED
+#include <string>
+#include <iostream>
+
+void print_howdy(const std::string& s) {
+ std::cout << "How're you doing, " << s << '?' << std::endl;
+}
+
+void print_bored(const std::string& s) {
+ std::cout << "Are you bored, " << s << '?' << std::endl;
+}
+
+BOOST_DLL_ALIAS_SECTIONED(print_howdy, howdy, Anna)
+BOOST_DLL_ALIAS_SECTIONED(print_bored, are_you_bored, Anna)
+//]
diff --git a/src/boost/libs/dll/example/tutorial7/tutorial7.cpp b/src/boost/libs/dll/example/tutorial7/tutorial7.cpp
new file mode 100644
index 00000000..e0186db2
--- /dev/null
+++ b/src/boost/libs/dll/example/tutorial7/tutorial7.cpp
@@ -0,0 +1,48 @@
+// 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)
+
+#include <vector>
+#include "../b2_workarounds.hpp"
+
+//[callplugcpp_tutorial7
+#include <boost/dll/shared_library.hpp>
+#include <boost/dll/library_info.hpp>
+#include <iostream>
+
+void load_and_execute(const boost::dll::fs::path libraries[], std::size_t libs_count) {
+ const std::string username = "User";
+
+ for (std::size_t i = 0; i < libs_count; ++i) {
+ // Class `library_info` can extract information from a library
+ boost::dll::library_info inf(libraries[i]);
+
+ // Getting symbols exported from 'Anna' section
+ std::vector<std::string> exports = inf.symbols("Anna");
+
+ // Loading library and importing symbols from it
+ boost::dll::shared_library lib(libraries[i]);
+ for (std::size_t j = 0; j < exports.size(); ++j) {
+ std::cout << "\nFunction '" << exports[j] << "' prints:\n\t";
+ lib.get_alias<void(const std::string&)>(exports[j]) // importing function
+ (username); // calling function
+ }
+ }
+}
+//]
+
+int main(int argc, char* argv[]) {
+ /*<-*/ BOOST_ASSERT(argc >= 3); /*->*/
+ std::vector<boost::dll::fs::path> libraries;
+ libraries.reserve(argc - 1);
+ for (int i = 1; i < argc; ++i) {
+ if (b2_workarounds::is_shared_library(argv[i])) {
+ libraries.push_back(argv[i]);
+ }
+ }
+
+ load_and_execute(&libraries[0], libraries.size());
+}