Add helper #defines to allow declaring embedded resources by name

* We want to be able to declare a 'name' of a resource and then fetch it
  later. To do this we create a tiny little reference (either an int on
  windows, or a pointer+length elsewhere), then actually fetch the data
  later.
This commit is contained in:
baldurk
2018-01-03 15:59:25 +00:00
parent f87d058cfb
commit fdfdda71ac
3 changed files with 19 additions and 6 deletions
+13 -3
View File
@@ -32,9 +32,19 @@
#define OS_DEBUG_BREAK() raise(SIGTRAP)
#define GetEmbeddedResource(filename) \
string(&CONCAT(data_, filename)[0], \
&CONCAT(data_, filename)[0] + CONCAT(CONCAT(data_, filename), _len))
struct EmbeddedResourceType
{
EmbeddedResourceType(const unsigned char *b, int l) : base(b), len(l) {}
const unsigned char *base;
int len;
std::string Get() const { return std::string(base, base + len); }
};
#define EmbeddedResource(filename) \
EmbeddedResourceType(&CONCAT(data_, filename)[0], CONCAT(CONCAT(data_, filename), _len))
#define GetEmbeddedResource(filename) EmbeddedResource(filename).Get()
#define GetDynamicEmbeddedResource(resource) resource.Get()
namespace OSUtility
{
+5 -2
View File
@@ -36,8 +36,11 @@
#define OS_DEBUG_BREAK() __debugbreak()
#define GetEmbeddedResource(filename) GetEmbeddedResourceWin32(CONCAT(RESOURCE_, filename))
string GetEmbeddedResourceWin32(int resource);
#define EmbeddedResourceType int
#define EmbeddedResource(filename) CONCAT(RESOURCE_, filename)
#define GetEmbeddedResource(filename) GetDynamicEmbeddedResource(EmbeddedResource(filename))
std::string GetDynamicEmbeddedResource(int resource);
namespace StringFormat
{
+1 -1
View File
@@ -41,7 +41,7 @@ using std::wstring;
// gives us an address to identify this dll with
static int dllLocator = 0;
string GetEmbeddedResourceWin32(int resource)
std::string GetDynamicEmbeddedResource(int resource)
{
HMODULE mod = NULL;
GetModuleHandleExA(