作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我是一名优秀的程序员,十分优秀!