MFC高手进来 对m_wSchema==0xffff的疑问

来源:百度知道 编辑:UC知道 时间:2024/05/23 01:23:55
m_wShema是CRUNTIMECLASS结构体的一个变量 在序列化中有用
小弟菜鸟 大概知道这个东西是记录一个类是NEW CLASS还是OLD CLASS
但是看到serialize()中 有这样的一个句子
if(pClassRef->m_Schema==0xffff)
{...}
这个句子是不是判断pClassRef所指向的CRUNTIMECLASS所记录的类 是不是一个新类
如果是新类按新类的方法serialize 如果是旧类就按旧类的方法serialize呢?
请高手指教
另外 一个类 这个m_wShema是什么被初始化的?被初始化成什么?为什么m_wShema是0xffff就是一个新类呢?
明白了 0xffff表示不支持序列化
那么请问什么是版本号啊 这个问题到现在也弄不懂

类的版本号是在初始化CRUNTIMECLASS对象的时候实现的,这个对象是类的

静态变量,所以可以通过判断它的地址来区分不同的类,它的实现是在

IMPLEMENT_DYNAMIC 这个宏里面的,其实每个支持运行是动态识别的类都有一个

class##类名的一个静态属性,版本,父类,是否支持串行化,等等,都是在初始化这

静态变量.

m_wShema默认的初始化是在上面那个宏里面来实现的,一般情况下都是传递的为

0xffff,就是默认不支持序列化,如果想支持序列化还需要实现

DECLARE_SERIAL 和 IMPLEMENT_SERIA 这两个宏,而m_wShema在IMPLEMENT_SERIA

这个宏执行完了后,值就不是0xffff,而是VERSIONABLE_SCHEMA | 2

因为IMPLEMENT_SERIA 的原型为IMPLEMENT_SERIA(当前类,父类,VERSIONABLE_SCHEMA | 2)

UINT m_wSchema; // schema number of the loaded class
m_wSchema类型是UINT,定义了序列化中保存对象到文档的程序的版本。如果不要求支持序列化特性,该域为0xFFFF,否则,不能为0;
当类的CRuntimeClass成员的m_wSchema为0xFFFF时,表示该对象不支持序列化