Okay, I have the following class cDataPackage. It basically is just a basic class for Creating/Saving/Loading dynamic resources.
Code:
class cDataPackage
{
protected:
// Data buffer and size
void *m_Buf;
unsigned long m_Size;
public:
cDataPackage() { m_Buf = NULL; m_Size = 0; }
~cDataPackage() { Free(); }
void *Create(unsigned long Size)
{
// Free a previously created buffer
Free();
// Allocate some memory and return a pointer
return (m_Buf = (void*)new char[(m_Size = Size)]);
}
// Free the allocated memory
void Free() { delete m_Buf; m_Buf = NULL; m_Size = 0; }
BOOL Save(char *Filename)
{
FILE *fp;
// Make sure there’s something to write
if(m_Buf != NULL && m_Size) {
// Open file, write size and data
if((fp=fopen(Filename, “wb”)) != NULL) {
fwrite(&m_Size, 1, 4, fp);
fwrite(m_Buf, 1, m_Size, fp);
fclose(fp);
return TRUE;
}
}
return FALSE;
}
void *Load(char *Filename, unsigned long *Size)
{
FILE *fp;
// Free a prior buffer
Free();
if((fp=fopen(Filename, “rb”))!=NULL) {
// Read in size and data
fread(&m_Size, 1, 4, fp);
if((m_Buf = (void*)new char[m_Size]) != NULL)
fread(m_Buf, 1, m_Size, fp);
fclose(fp);
// Store size to return
if(Size != NULL)
*Size = m_Size;
// return pointer
return m_Buf;
}
return NULL;
}
};
He is a working example
Code:
typedef struct {
char Name[32];
} sName;
int main()
{
cDataPackage DP;
DWORD Size;
// Create the data package (w/64 bytes) and get the
// pointer, casting it to an sName structure type.
sName *Names = (sName*)DP.Create(64);
// Since there are 64 bytes total, and each name uses
// 32 bytes, then I can have 2 names stored.
strcpy(Names[0].Name, "Jim");
strcpy(Names[1].Name, "Adams");
// Save the names to disk and free the data buffer
DP.Save("names.dat");
DP.Free();
// Load the names from disk. Size will equal 64
// when the load function returns.
Names = (sName*)DP.Load("names.dat", &Size);
// Display the names
MessageBox(NULL, Names[0].Name, "1st Name", MB_OK);
MessageBox(NULL, Names[1].Name, "2nd Name", MB_OK);
// Free up the data package
DP.Free();
}
That example works flawlessly. Though if I try making a struct with more data. The pointer doesn't save right. I was wondering if anyone knew how to fix this, or a suggestion to keep the basic functionality the same. Thank you so much for any help.