4#include "Stroika/Foundation/StroikaPreComp.h"
6#include "Stroika/Foundation/Common/Common.h"
7#include "Stroika/Foundation/Execution/Resources/ResourceNotFoundException.h"
10#include "WindowsResourceManager.h"
14using namespace Stroika::Foundation::Execution::Resources;
15using namespace Stroika::Foundation::Execution::Resources::Concrete;
17class WindowsResourceManager::Rep_ final :
public Manager::_IRep {
22 Rep_ (HMODULE hModule)
26 virtual Accessor ReadResource (
const Name& name)
const override
28 HRSRC hres = ::FindResource (fModule_, name.GetSDKString (), name.GetType ());
29 if (hres !=
nullptr) {
30 HGLOBAL lglbl = ::LoadResource (fModule_, hres);
31 if (lglbl !=
nullptr) {
32 const void* lr = ::LockResource (lglbl);
34 const byte* start =
reinterpret_cast<const byte*
> (lr);
35 return Manager::_mkAccessor (span{start, ::SizeofResource (fModule_, hres)});
38 Throw (ResourceNotFoundException::kThe);
47WindowsResourceManager::WindowsResourceManager (HMODULE hModule)
48 :
Manager{make_shared<Rep_> (hModule)}
void Throw(T &&e2Throw)
identical to builtin C++ 'throw' except that it does helpful, type dependent DbgTrace() messages firs...