当然,这不是使用typedef来使用新名称访问现有类,或者使用旧名称保留类的版本以读取存档文件并将读入的对象复制到具有新名称的同一类中.
解决方法
此CRuntimeClass对象也会添加到由动态创建类时搜索的框架维护的列表中.
您需要确保CRuntimeClass对象包含m_lpszClassName中类的旧名称.
你有两个选择:
>覆盖建设
CRuntimeClass对象设置名称
>更改存储在其中的班级名称
m_lpszClassName字段后有
已创建
覆盖CRuntimeClass对象的构造
为此,您需要创建自己的DECLARE_DYMAMIC,DECLARE_DYNCREATE,DECLARE_SERIAL,IMPLEMENT_DYMAMIC,IMPLEMENT_DYNCREATE和IMPLEMENT_SERIAL版本.
您只需复制和重命名现有实现即可.
在您的IMPLEMENT_DYNAMIC版本中,您需要更改构造CRuntimeClass的代码,以便使用旧类的名称对其进行初始化.
创建CRuntimeClass对象后,更改存储在m_lpszClassName字段中的类名
由于CRuntimeClass是由静态初始化程序创建的,我认为您不能在类中执行此操作.
我认为最好的地方是你的应用程序的InitInstance.
将静态char *变量添加到包含旧类名的应用程序类中.
然后,在InitInstance中,在类的CRuntimeClass中设置m_lpszClassName字段.
>第一种方法的优点是
保持班级内的变化
本身.
>第二个提出申请
以某种方式意识到这个阶级
可能不应该.
无论哪种方式,首先要做的是完全熟悉动态创建和序列化工作的方式.
原文地址:https://www.jb51.cc/c/110675.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。