2
0
mirror of https://github.com/boostorg/dll.git synced 2026-01-21 17:02:09 +00:00
Files
dll/example/tutorial9/tutorial9.cpp
2015-11-21 16:23:26 +03:00

53 lines
1.3 KiB
C++

// Copyright 2015 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 <boost/predef/os.h>
#if BOOST_OS_WINDOWS
//[callplugcpp_tutorial9
#include <boost/dll/import.hpp> // for import
#include <iostream>
namespace dll = boost::dll;
template <class Func>
struct helper {
private:
dll::shared_library lib_;
Func* f_;
public:
helper(const char* library, const char* function)
: lib_(library)
, f_(&lib_.get<GetStdHandle_t>(function))
{}
inline operator Func* () const {
return f_;
}
};
int main() {
typedef HANDLE(__stdcall GetStdHandle_t)(DWORD ); // function signature with calling convention
typedef HANDLE(GetStdHandle_no_call_conv_t)(DWORD ); // function signature without calling convention
boost::function<GetStdHandle_no_call_conv_t> plugin = helper<GetStdHandle_t>("Kernel32.dll", "GetStdHandle");
std::cout << "1. GetStdHandle() returned " << plugin(STD_OUTPUT_HANDLE) << std::endl;
std::cout << "2. GetStdHandle() returned " << helper<GetStdHandle_t>("Kernel32.dll", "GetStdHandle")(STD_OUTPUT_HANDLE) << std::endl;
return 0;
}
//]
#else // BOOST_WINDOWS
int main()
{
return 0;
}
#endif // BOOST_WINDOWS