diff options
Diffstat (limited to 'shared/dll_loader.cpp')
-rw-r--r-- | shared/dll_loader.cpp | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/shared/dll_loader.cpp b/shared/dll_loader.cpp deleted file mode 100644 index 4e2c0e65..00000000 --- a/shared/dll_loader.cpp +++ /dev/null @@ -1,83 +0,0 @@ -// ************************************************************************** -// * This file is part of the FreeFileSync project. It is distributed under * -// * GNU General Public License: http://www.gnu.org/licenses/gpl.html * -// * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) * -// ************************************************************************** - -#include "dll_loader.h" -#include <map> - -namespace -{ -class DllHandler -{ -public: - static DllHandler& getInstance() - { - static DllHandler instance; - return instance; - } - - HMODULE getHandle(const std::wstring& libraryName) - { - if (libraryName.empty()) - return ::GetModuleHandle(NULL); //return handle to calling executable - - HandleMap::const_iterator iter = handles.find(libraryName); - if (iter != handles.end()) - return iter->second; - - HMODULE newHandle = ::LoadLibrary(libraryName.c_str()); - if (newHandle != NULL) - handles.insert(std::make_pair(libraryName, newHandle)); - - return newHandle; - } - -private: - DllHandler() {} - DllHandler(const DllHandler&); - DllHandler& operator=(const DllHandler&); - - ~DllHandler() - { - for (HandleMap::const_iterator i = handles.begin(); i != handles.end(); ++i) - ::FreeLibrary(i->second); - } - - typedef std::map<std::wstring, HMODULE> HandleMap; - HandleMap handles; //only valid handles here! -}; -} - - -FARPROC util::loadSymbol(const std::wstring& libraryName, const std::string& functionName) -{ - const HMODULE libHandle = DllHandler::getInstance().getHandle(libraryName); - return libHandle != NULL ? ::GetProcAddress(libHandle, functionName.c_str()) : NULL; -} - - -std::string util::getResourceStream(const std::wstring& libraryName, size_t resourceId) -{ - std::string output; - const HMODULE module = DllHandler::getInstance().getHandle(libraryName); - if (module) - { - const HRSRC res = ::FindResource(module, MAKEINTRESOURCE(resourceId), RT_RCDATA); - if (res != NULL) - { - const HGLOBAL resHandle = ::LoadResource(module, res); - if (resHandle != NULL) - { - const char* stream = static_cast<const char*>(::LockResource(resHandle)); - if (stream) - { - const DWORD streamSize = ::SizeofResource(module, res); - output.assign(stream, streamSize); - } - } - } - } - return output; -} |