c – 重命名MFC CArchive序列化类
我正在使用MFC的CArhive类来保存我的应用程序的项目文件.其中一个类名称非常不准确,我想更改它,但只是更改名称到处都会使以前的存档文件无法处理存档错误.有没有办法更改已归档类的名称而不渲染所有以前保存的文件无用?
当然,这不是使用typedef来使用新名称访问现有类,或者使用旧名称保留类的版本以读取存档文件并将读入的对象复制到具有新名称的同一类中. 解决方法
关键点在于,当您使用DECLARE_SERIAL和IMPLEMENT_SERIAL时,会在您的类中添加一个CRuntimeClass成员,该成员在其m_lpszClassName字段中包含该名称.
此CRuntimeClass对象也会添加到由动态创建类时搜索的框架维护的列表中. 您需要确保CRuntimeClass对象包含m_lpszClassName中类的旧名称. 你有两个选择: >覆盖建设 覆盖CRuntimeClass对象的构造 为此,您需要创建自己的DECLARE_DYMAMIC,DECLARE_DYNCREATE,DECLARE_SERIAL,IMPLEMENT_DYMAMIC,IMPLEMENT_DYNCREATE和IMPLEMENT_SERIAL版本. 创建CRuntimeClass对象后,更改存储在m_lpszClassName字段中的类名 由于CRuntimeClass是由静态初始化程序创建的,我认为您不能在类中执行此操作. >第一种方法的优点是 无论哪种方式,首先要做的是完全熟悉动态创建和序列化工作的方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |