运行时对象模型服务
CObjectCRuntimeClass这两种类封装了一些对象服务,包括对运行时对象信息的访问,串行化以及动态对象创建。所有从CObject继承的类都继承了这些功能。
通过访问运行时对象信息,你可以在运行时决定对象的信息。当你需要额外的函数参数类型检查,或者你需要编写与类和对象有关的用于特定目的的代码时,这种在运行时决定对象信息的能力非常有用。C++语言本身并不直接支持运行时对象信息。
串行化是指向一个文件写入或者从一个文件读出对象的内容的过程。通过串行化,你即使在应用程序退出以后也还可以保存对象的信息。当应用程序重新启动以后,你可以从文件中读入对象的内容。这样的数据对象被称为是“永久性”的。
动态对象创建功能使你能够在运行时创建指定类型的对象。例如,文档、视和框架对象必须支持动态创建,因为应用框架必须动态地创建它们。
下面的表格列出了支持运行时类信息、串行化和动态创建的MFC宏。
如果需要关于运行时对象服务和串行化的更详细的信息,可以参考《Visual C++程序员指南》中的“CObject 类:访问运行时类信息”部分。

运行时对象模式服务宏
DECLARE_DYNAMIC允许对运行时类信息进行访问(必须在类定义中使用)
DECLARE_DYNCREATE允许动态创建和访问运行时类信息(必须在类定义中使用)
DECLARE_SERIAL允许串行化和访问运行时类信息(必须在类定义中使用)
IMPLEMENT_DYNAMIC允许对运行时类信息进行访问(必须在类的实现中使用)
IMPLEMENT_DYNCREATE允许动态创建和访问运行时类信息(必须在类的实现中使用)
IMPLEMENT_SERIAL允许串行化和访问运行时类信息(必须在类的实现中使用)
RUNTIME_CLASS返回与指定名字的类对应的CRuntimeClass结构

OLE经常需要在运行时动态地创建对象。例如,一个OLE服务器必须能够在响应客户的请求时动态地创建OLE项目。类似地,一个自动化服务器也必须能够在响应自动化客户的请求时动态地创建项目。
微软基础类库特别为OLE提供了两个宏。

OLE对象的动态创建
DECLARE_OLECREATE允许通过OLE自动化创建对象
IMPLEMENT_OLECREATE允许由OLE系统创建对象