1 引言
Visual C++ 6.0语言开发环境在MFC中以CArchive类为中心提供输入输出的串行化和数据版本控制功能。一般来说,随着软件的升级,对应的输入输出也会发生改变,如何保证多个版本的软件与多种输入输出数据之间的亲和性成为问题。比如说,当用户使用1.0版的软件,而提供的输入却是2.0版软件的输出,结果会如何呢?同样2.0版的软件如何处理1.0版生成的数据呢?
的确,用户可以定义一套自己的文件格式为上述因版本不同造成的造成的麻烦提供解决方案,许多软件都是这么干,但如果你所编制的软件规模很小,功能单一,对数据格式并不在意(当然要保证输入输出正确),那么花力气指定自己的数据文件格式似乎过于繁琐。使用CArchive可以简化这类软件的编制。
2 CArchive的版本控制方式
当你使用DECLARE_SERIAL和IMPLEMENT_SERAIL宏时,你就在你的类中声明并定义了一个CRuntimeClass类的静态结构成员,该结构中的m_wSchema可以记录你指定的版本号。注意虽然按照命名约定m_wSchema似乎是个WORD,但实际它是个UINT。当串行化输出时,类信息(即类名和版本号的低字,高字是标志)被写入数据文件,而串行化输入时CArchive::ReadClass()和CArchive::ReadObject()根据这些信息以及后面的对象数据重建对象,返回对象指针。这一切均在类似pObject<
文章来源于领测软件测试网 https://www.ltesting.net/