【2012年终总结】之五 生成GUID和类的串行化

//生成GUID ,如果GUID生成失败则用一个随机数来当作唯一编码

 1 //生成GUID;
 2 CString MakeGUID()
 3 {
 4     GUID   guid; 
 5     CString   szGUID; 
 6 
 7     //如果不能生成GUID则用一个随机数来作为GUID;
 8     if   (S_OK   ==   ::CoCreateGuid(&guid)) 
 9     { 
10         TCHAR chFormat[] = _T("%08X%04X%04x%02X%02X%02X%02X%02X%02X%02X%02X");
11         szGUID.Format( chFormat
12             ,   guid.Data1 
13             ,   guid.Data2 
14             ,   guid.Data3 
15             ,   guid.Data4[0],   guid.Data4[1] 
16         ,   guid.Data4[2],   guid.Data4[3],   guid.Data4[4],   guid.Data4[5] 
17         ,   guid.Data4[6],   guid.Data4[7] 
18         ); 
19 
20         return szGUID;
21     }
22 
23     int r = rand() % 10000 + rand() % 1000 + rand() % 100 + rand() & 10 + rand();
24 
25     char chArray[MAX_ARRAY_LENTH] = {0};
26     _itoa_s(r, chArray, sizeof(chArray));
27 
28     szGUID = CString(chArray);
29 
30     return  szGUID;
31 
32 
33 }

//类的串行化

//类得串行化要满足5个条件

//1、继承自CObject

//2、声明DECLARE_SERIAL(类名)

//3、实现void Serialize(CArchive& ar)

//4、IMPLEMENT_SERIAL(类名, CObject, 版本号)

//5、有一个不带参数的构造函数

//KeyFile.h

 1 class CKeyFile : public CObject
 2 
 3 {
 4 
 5 public:
 6 
 7   DECLARE_SERIAL(CkeyFile)
 8 
 9   CKeyFile(void);
10 
11   void Serialize(CArchive& ar);
12 protected:
13 
14      int m_nAge;
15 
16      string m_strName;  
17 
18 }

//KeyFile.cpp

 1 IMPLEMENT_SERIAL(CKeyFile, CObject, 1)
 2 
 3 
 4 
 5 CKeyFile::CKeyFile()
 6 
 7 {
 8 
 9   //codes
10 
11 }
12 
13 
14 
15 void CKeyFile::Serialize(CArchive& ar)
16 
17 {
18 
19   //只要写入和读出的数据类型的顺序一致即可
20 
21   if(ar.IsStoring()) //保存
22 
23   {
24 
25     ar<<m_nAge<<m_strName;
26   }
27 
28   else                   //打开
29 
30   {
31 
32     ar>>m_nAge>>m_strName;
33   } 
34 
35 }

//main.cpp

 1 int _tmain(int argc, TCHAR* argv[], TCHAR* envn[])
 2 
 3 {
 4 
 5   //写文件
 6 
 7   CFile writeFile(fileName, CFile::modeCreate | CFile::modeWrite);
 8 
 9   CArchive ar(&writeFile, CArchive::store);
10 
11   CKeyFile objFile;
12 
13   //为objFile成员一些列赋值操作
14 
15   objFile.Serialize(ar);
16 
17 
18 
19   //读文件
20 
21   CFile readFile(fileName, CFile::modeRead);
22 
23   CArchive ar2(&readFile, CArchive::load);
24 
25   CKeyFile objFile2;
26 
27   objFile2.Serialize(ar2); 
28 
29 
30 
31 }
原文地址:https://www.cnblogs.com/cuish/p/2906395.html