📄 testbs.cpp
字号:
// include base file
#include <BS_BASE.H>
// for fopen()
#include <stdio.h>
// define the struct磗 ID
#define OL_MYSTRUCT1ID 0x16
// enumerate members
enum
{
char1,
int1 ,
long1,
string1,
};
// derive class
class MyStruct1 : public _BS_OBJ_
{
public:
// constructor
MyStruct1()
{
// sets object磗 ID
SetID(OL_MYSTRUCT1ID);
// add four members
//
// this members will be member 1, 2, 3 and 4
AddMember();
AddMember();
AddMember();
AddMember();
}
// set / get member value
BOOL setchar1(char & p)
{
return SetMemberData(char1, &p, sizeof(char));
}
char getchar1()
{
// i don磘 know why this, but it works
char * p = (char*)GetMemberData(char1);
return *p;
}
// set / get int member value
BOOL setint1(int & p)
{
return SetMemberData(int1, &p, sizeof(int));
}
int getint1()
{
int * p = (int*)GetMemberData(int1);
return *p;
}
// set / get long member value
BOOL setlong1(long & p)
{
return SetMemberData(long1, &p, sizeof(long));
}
long getlong1()
{
long * p = (long*)GetMemberData(long1);
return *p;
}
// set / get string member value
BOOL setstring1(char * p)
{
return SetMemberData(string1, p, strlen(p) + 1 /* \0 */);
}
char * getstring1()
{
return (char*)GetMemberData(string1);
}
};
/////////////////////////
// do the test
int main()
{
// aux vars
BS_SIZE size = 0;
void * buffer = NULL;
unsigned int write,
read ;
// data var磗
char ch = 'a';
int i = 1234;
long l = 1234567;
char * str = "test string 1";
// file to test object
FILE * fil;
// open file
fil = fopen("C:\\test.my", "w+");
if(fil == NULL)
{
printf("error open file !!\n");
return 0;
}
// objects to use in the test
MyStruct1 my1, my2, my3, my4;
// set members of object 1
my1.setchar1 (ch) ;
my1.setint1 (i) ;
my1.setlong1 (l) ;
my1.setstring1(str);
// new values to test
ch = 'z';
i = 54321;
l = 7654321;
str = "test with a bigger string : \nbla, bla, bla, bla, bla, bla, bla, bla ,bla, bla, bla, bla, bla, bla, bla, bla";
// set members of object 2
my2.setchar1 (ch) ;
my2.setint1 (i) ;
my2.setlong1 (l) ;
my2.setstring1(str);
///////////////////
// write object 1
// gets data to write
size = my1.Serialize(&buffer);
// write the data size
write = fwrite( &size , sizeof(BS_SIZE), 1, fil);
if(write != 1)
{
printf("error writing data !!\n");
return 0;
}
// write the data
write = fwrite( buffer, sizeof(BS_BYTE) , size, fil);
if(write != size)
{
printf("error writing data !!\n");
return 0;
}
/////////////////////////////////////////////
///////////////////
// write object 2
// gets data to write
size = my2.Serialize(&buffer);
// write the data size
write = fwrite( &size , sizeof(BS_SIZE), 1, fil);
if(write != 1)
{
printf("error writing data !!\n");
return 0;
}
// write the data
write = fwrite( buffer, sizeof(BS_BYTE) , size, fil);
if(write != size)
{
printf("error writing data !!\n");
return 0;
}
// prepare for reading
fseek( fil, 0L, SEEK_SET );
////////////////////////////////////////////////////
///////////////////
// read object 3, using outside buffer
// read the data size
read = fread( &size, sizeof(BS_SIZE), 1, fil );
// create buffer
buffer = malloc(size);
// read the data
read = fread( buffer, sizeof(BS_BYTE), size, fil );
if(read != size)
{
printf("error reading data !!\n");
return 0;
}
// deserialize the object
if(!my3.Deserialize(buffer))
{
printf("error deserializing data !!\n");
return 0;
}
// since we created the buffer, we must release it
free(buffer);
buffer = NULL;
////////////////////////////////////////////////////
///////////////////
// read object 4, using object磗 buffer
// read datasize
read = fread( &size, sizeof(BS_SIZE), 1, fil );
// get object serial buffer
buffer = my4.GetSerialBuffer(size);
// read the data
read = fread( buffer, sizeof(BS_BYTE), size, fil );
if(read != size)
{
printf("error reading data !!\n");
return 0;
}
// deserialize object
if(!my4.Deserialize())
{
printf("error deserializing data !!\n");
return 0;
}
// free object磗 serial buffer
// this is not realy necessary
my4.ReleaseSerialBuffer();
// close file
fclose(fil);
// show output
printf("\n-------- Writting Objects ---------");
printf("\nMy1 --> char member = %c\n int member = %i\n long member = %ld\n string member = %s\n",
my1.getchar1(),my1.getint1(),my1.getlong1(),my1.getstring1());
printf("\nMy2 --> char member = %c\n int member = %i\n long member = %ld\n string member = %s\n",
my2.getchar1(),my2.getint1(),my2.getlong1(),my2.getstring1());
printf("\n-------- Reading Objects ----------");
printf("\nMy3 --> char member = %c\n int member = %i\n long member = %ld\n string member = %s\n",
my3.getchar1(),my3.getint1(),my3.getlong1(),my3.getstring1());
printf("\nMy4 --> char member = %c\n int member = %i\n long member = %ld\n string member = %s\n",
my4.getchar1(),my4.getint1(),my4.getlong1(),my4.getstring1());
// end
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -