如何将数据从资源指针存储到 C++ 中的静态内存缓冲区?

How to store data from resource pointer to a static memory buffer in C++?

我已经在 Visual studio 的 VC++ 项目的资源中加载了一个 a.dat 文件 如 documentation.

所述

现在在我的主要代码中,我想将此数据从资源指针加载到静态内存缓冲区中:

HRSRC myResource = ::FindResource(NULL, MAKEINTRESOURCE(IDR_RCDATA1), RT_RCDATA);
unsigned int myResourceSize = ::SizeofResource(NULL, myResource);
HGLOBAL myResourceData = ::LoadResource(NULL, myResource);
void* pMyBinaryData = ::LockResource(myResourceData);

现在我陷入了如何创建静态内存缓冲区并存储来自 pMyBinaryData 指针的数据的问题。

任何人都可以帮助解决这个问题拜托! 提前致谢。

您拥有所需的所有信息:数据大小 (myResourceSize) 和资源内容 (pMyBinaryData),因此您可以创建缓冲区并复制内容进入其中:

void *buffer = malloc(myResourceSize);
memcpy(buffer, pMyBinaryData, myResourceSize);

buffer 现在拥有构成资源的字节副本,您可以根据需要保留它 - 您甚至可以调用 ::UnlockResource(myResourceData); 而不会影响 buffer .不过不要忘记在某个阶段做一个 free(buffer); - 除非你在程序的生命周期中需要它。

但是如果 static 是指静态的预分配数组,那么您需要预先分配最大可能的大小:

#define MAX_RESOURCE_SIZE 65536 // There is no maximum size - you'll need to pick one
static char buffer[MAX_RESOURCE_SIZE];
...
if (myResourceSize>MAX_RESOURCE_SIZE) {
    Error("Resource too big!");
} // if
memcpy(buffer, pMyBinaryData, myResourceSize);