zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    李开复给中国学生的第二封信:从优秀到卓越
    李开复写给中国学生的一封信:从诚信谈起
    Cocos2D-x培训课程
    CCLabelAtlas创建自定义字体
    cocos2d-x设计模式发掘之五:防御式编程模式
    【转】VS2010中使用AnkhSvn
    cocos2d-x 2.1.4学习笔记01:windows平台搭建cocos2d-x开发环境
    【转】Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)
    ffmpeg开发中出现的问题(二)
    ffmpeg开发中出现的问题
  • 原文地址:https://www.cnblogs.com/cuish/p/2906395.html
Copyright © 2011-2022 走看看