【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 }
复制代码

 

 

 

 

 

posted on   崔好好  阅读(210)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗

导航

< 2013年2月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 1 2
3 4 5 6 7 8 9
点击右上角即可分享
微信分享提示