//生成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 }