【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 }
**********************技术交流请 email:cuihao0532#163.com 欢迎转载,转载请注明出处!***************************** 如果对本文满意请扫描文章左侧【二维码添加微信】获取更多好玩、有趣、有益、有营养的料,
你我共同成长!Y(^_^)Y
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗