//版本3
struct Info3
{
int nVersion;
short a;
int b;
char name[2049];
void Update(void *p)
{
}
};
//版本2
struct Info2
{
int nVersion;
char name[2049];
int a;
void Update(void *p)
{
memcpy(((Info3*)p)->name,name,4096);
((Info3*)p)->a=a;
((Info3*)p)->b=0;
((Info3*)p)->nVersion=nVersion;
}
};
//版本1
struct Info1
{
int nVersion;
char name[2049];
void Update(void *p)
{
memcpy(((Info2*)p)->name,name,4096);
((Info2*)p)->a=0;
((Info2*)p)->nVersion=nVersion;
}
};
union INFO
{
Info1 a;
Info2 b;
Info3 c;
};
#define CURRENT_VERSION 2
class Player
{
public:
void Pause(void *p,int nSize)
{
INFO in;
INFO out;
memcpy(&in,p,nSize);
memcpy(&out,p,nSize);
switch(*((int*)p))
{
case 1:
{
ZeroMemory(&out,sizeof(Info1));
in.a.Update(&out);
}
case 2:
{
ZeroMemory(&in,sizeof(Info2));2
out.b.Update(&in);
}
case 3:
{
ZeroMemory(&out,sizeof(Info3));
in.c.Update(&out);
}
}
memcpy(&m_info,&out,sizeof(m_info));
//memcpy(&m_info,&in,sizeof(m_info));
}
void ChangeA(int value)
{
m_info.a=value;
if(m_info.nVersion==CURRENT_VERSION)
{
//部分写
}
else
{
//整体Put一次
m_info.nVersion=CURRENT_VERSION;
}
}
private:
Info3 m_info;
};