diff options
Diffstat (limited to 'src/boost/libs/dll/example/tutorial7')
-rw-r--r-- | src/boost/libs/dll/example/tutorial7/library1.cpp | 21 | ||||
-rw-r--r-- | src/boost/libs/dll/example/tutorial7/library2.cpp | 26 | ||||
-rw-r--r-- | src/boost/libs/dll/example/tutorial7/tutorial7.cpp | 48 |
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()); +} |