2016-06-11 3 views
0

Ich habe eine a.dat Datei in Ressource in VC++ Projekt in Visual Studio wie in documentation erzählt geladen.Wie speichert man Daten aus dem Ressourcenzeiger in einen statischen Puffer in C++?

Jetzt in meinem Haupt-Code, möchte ich von der Ressourcenzeiger diese Daten in einen statischen Speicherpuffer laden:

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

Jetzt bin ich stucked, wie ein statischer Speicherpuffer und Speicherdaten von pMyBinaryData erstellen Zeiger.

Kann jemand helfen, um dies zu lösen Bitte! Vielen Dank im Voraus.

Antwort

1

Sie haben alle Informationen, die Sie brauchen: die Größe der Daten (myResourceSize) und die Inhalte der Ressource (pMyBinaryData), so können Sie einen Puffer erstellen und den Inhalt in es kopieren:

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

buffer enthält jetzt eine Kopie der Bytes, aus denen Ihre Ressource besteht, und Sie können sie so lange aufbewahren, wie Sie benötigen - Sie können sogar ::UnlockResource(myResourceData); aufrufen, ohne dass sich dies auf buffer auswirkt. Vergessen Sie nicht, irgendwann eine free(buffer); zu tun - es sei denn, Sie benötigen es für die Lebensdauer des Programms.

Aber wenn durch static Sie eine statische, vorab zugewiesene Array bedeuten, dann müssen Sie auf die größtmögliche Größe Front vorbelegt:

#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

My ** ** a.dat Datei ist ein binäres Datei. Wird das Speichern des Inhalts in einem ** char ** _buffer_ kein Problem verursachen? – Mavie

+0

@Victor Gute Frage - aber 'char' ist der grundlegendste Typ in C. Man sollte meinen, es sollte" Byte "sein - aber das ist nicht mal einer der normalen Typen! 'malloc (size)' ist so definiert, dass ein Puffer von 'size'' char's zurückgegeben wird - oder null, wenn nicht genug Speicher vorhanden ist. Ein Array von 'char' ist was du willst; gehen Sie einfach nicht mit 'printf()' oder irgendetwas auf dem Array! –

+0

Meine ** a.dat ** Datei ist etwa 97 MB. Kann ein Puffer dieser Größe erstellt werden? – Mavie

Verwandte Themen