13 #ifndef __STOUT_WINDOWS_DYNAMICLIBRARY_HPP__
14 #define __STOUT_WINDOWS_DYNAMICLIBRARY_HPP__
42 if (handle_ !=
nullptr) {
50 if (handle_ !=
nullptr) {
51 return Error(
"Library already opened");
54 handle_ = ::LoadLibraryW(wide_stringify(path).data());
56 if (handle_ ==
nullptr) {
57 return WindowsError(
"Could not load library '" + path +
"'");
67 if (handle_ ==
nullptr) {
68 return Error(
"Could not close library; handle was already `nullptr`");
71 if (!::FreeLibrary(handle_)) {
73 "Could not close library '" + (path_.
isSome() ? path_.
get() :
""));
84 if (handle_ ==
nullptr) {
86 "Could not get symbol '" + name +
"'; library handle was `nullptr`");
89 void* symbol = ::GetProcAddress(handle_, name.c_str());
91 if (symbol ==
nullptr) {
93 "Error looking up symbol '" + name +
"' in '" +
105 #endif // __STOUT_WINDOWS_DYNAMICLIBRARY_HPP__
Try< Nothing > open(const std::string &path)
Definition: dynamiclibrary.hpp:47
Definition: nothing.hpp:16
Definition: errorbase.hpp:35
Definition: error.hpp:106
Try< void * > loadSymbol(const std::string &name)
Definition: dynamiclibrary.hpp:82
bool isSome() const
Definition: option.hpp:115
const T & get() const &
Definition: option.hpp:118
DynamicLibrary is a very simple wrapper around the programming interface to the dynamic linking loade...
Definition: dynamiclibrary.hpp:28
DynamicLibrary()
Definition: dynamiclibrary.hpp:32
Try< Nothing > close()
Definition: dynamiclibrary.hpp:64
virtual ~DynamicLibrary()
Definition: dynamiclibrary.hpp:40
constexpr const char * name
Definition: shell.hpp:41