2016-06-11 33 views
0

我已经加载了一个a.dat文件在VC++项目中的Visual Studio ,如documentation中所述。如何将资源指针中的数据存储到C++中的静态内存缓冲区中?

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

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创建一个静态存储器缓冲区和存储数据stucked指针。

任何人都可以帮助解决这个问题请! 在此先感谢。

回答

1

你所有您需要的信息:数据(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); 
+0

我的** ** a.dat文件是一个二进制文件。将其内容保存为** char ** _buffer_不会产生任何问题? – Mavie

+0

@Victor好问题 - 但'char'是C中最基本的类型。你会认为它应该是'byte' - 但这甚至不是正常类型之一! 'malloc(size)'定义为返回大小为char的缓冲区 - 如果没有足够的内存,则返回零。 “char”数组就是你想要的;只是不要使用'printf()'或者数组上的任何东西! –

+0

我** a.dat **文件大约97 MB。可以创建一个这样大小的缓冲区? – Mavie

相关问题