2016-06-11 37 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

相關問題