diff options
author | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:19:14 +0200 |
---|---|---|
committer | Daniel Wilhelm <daniel@wili.li> | 2014-04-18 17:19:14 +0200 |
commit | 01eb8253196672c969a39587e90b49321a182428 (patch) | |
tree | 4a3b71d7913de519744466c9227fda6461c4f0b5 /zen/dll.h | |
parent | 5.0 (diff) | |
download | FreeFileSync-01eb8253196672c969a39587e90b49321a182428.tar.gz FreeFileSync-01eb8253196672c969a39587e90b49321a182428.tar.bz2 FreeFileSync-01eb8253196672c969a39587e90b49321a182428.zip |
5.1
Diffstat (limited to 'zen/dll.h')
-rw-r--r-- | zen/dll.h | 39 |
1 files changed, 17 insertions, 22 deletions
@@ -21,7 +21,7 @@ Manage DLL function and library ownership Usage: typedef BOOL (WINAPI* IsWow64ProcessFun)(HANDLE hProcess, PBOOL Wow64Process); - const zen::DllFun<IsWow64ProcessFun> isWow64Process(L"kernel32.dll", "IsWow64Process"); + const zen::SysDllFun<IsWow64ProcessFun> isWow64Process(L"kernel32.dll", "IsWow64Process"); if (isWow64Process) ... use function ptr ... */ @@ -29,11 +29,11 @@ template <class Func> class DllFun { public: - DllFun() : fun(NULL) {} + DllFun() : fun(nullptr) {} DllFun(const wchar_t* libraryName, const char* functionName) : hLibRef(new HMODULE(::LoadLibrary(libraryName)), deleter), - fun(*hLibRef ? reinterpret_cast<Func>(::GetProcAddress(*hLibRef, functionName)) : NULL) {} + fun(*hLibRef ? reinterpret_cast<Func>(::GetProcAddress(*hLibRef, functionName)) : nullptr) {} operator Func() const { return fun; } @@ -50,10 +50,13 @@ template <class Func> class SysDllFun { public: - SysDllFun() : fun(NULL) {} + SysDllFun() : fun(nullptr) {} - SysDllFun(const wchar_t* systemLibrary, const char* functionName) : - fun(reinterpret_cast<Func>(::GetProcAddress(::GetModuleHandle(systemLibrary), functionName))) {} + SysDllFun(const wchar_t* systemLibrary, const char* functionName) + { + HMODULE mod = ::GetModuleHandle(systemLibrary); + fun = mod ? reinterpret_cast<Func>(::GetProcAddress(mod, functionName)) : nullptr; + } operator Func() const { return fun; } @@ -88,32 +91,24 @@ std::string getResourceStream(const std::wstring& libraryName, size_t resourceId -//---------------Inline Implementation--------------------------------------------------- +//--------------- implementation--------------------------------------------------- inline std::string getResourceStream(const wchar_t* libraryName, size_t resourceId) { - std::string output; - HMODULE module = ::LoadLibrary(libraryName); - if (module) + if (HMODULE module = ::LoadLibrary(libraryName)) { - ZEN_ON_BLOCK_EXIT(::FreeLibrary(module)); + ZEN_ON_SCOPE_EXIT(::FreeLibrary(module)); - const HRSRC res = ::FindResource(module, MAKEINTRESOURCE(resourceId), RT_RCDATA); - if (res != NULL) + if (HRSRC res = ::FindResource(module, MAKEINTRESOURCE(resourceId), RT_RCDATA)) { - const HGLOBAL resHandle = ::LoadResource(module, res); - if (resHandle != NULL) + if (HGLOBAL resHandle = ::LoadResource(module, res)) { - const char* stream = static_cast<const char*>(::LockResource(resHandle)); - if (stream) - { - const DWORD streamSize = ::SizeofResource(module, res); - output.assign(stream, streamSize); - } + if (const char* stream = static_cast<const char*>(::LockResource(resHandle))) + return std::string(stream, static_cast<size_t>(::SizeofResource(module, res))); //size is 0 on error } } } - return output; + return std::string(); } } |