gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:38:08 26 4
gpt4 key购买 nike

我在 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);

关于c++ - 如何将数据从资源指针存储到 C++ 中的静态内存缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37763299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com