

Программирование на языке MFC
Мой второй блог в серии программирования
Что хранит в себе информация времени выполнения?
Что хранит в себе информация времени выполнения? Естественно, она должна хранить имя класса. Для хранения имени класса служит поле mJpszClassName. Для того чтобы мы могли создать объект этого класса динамически, мы должны знать размер, который занимает объект этого класса. Размер объекта хранится в поле m__nObjectSize. Поле m__wSchema фактически является номером версии класса. Дело в том, что описание класса может изменяться от версии программы к версии, поэтому иногда (в частности, в ходе процесса сериализации) возникает необходимость узнать, к какой версии описания класса принадлежит объект.
Для того чтобы в ходе выполнения программы мог быть создан объект класса, который описывает CRuntimeClass, она хранит в себе указатель на конструктор по умолчанию этого класса – поле m_pfnCreateObject (CObject* (PASCAL* m_pfnCreateObject)()). Непосредственно для создания объекта можно воспользоваться методом CreateObjectQ, который, выполняя функцию, указатель на которую находится в поле m_pfnCreateObject, возвращает указатель на созданный объект.
Если в программе возникла необходимость получить информацию о том классе, от которого был унаследован описываемый в структуре файл, то для этого можно воспользоваться полем mjDfnGetBaseClass (CRuntimeClass* (PASCAL* m_pfnGetBase-Class)()), в котором находится указатель на метод, позволяющий получить такую информацию.
Для сохранения объекта описываемого класса в архиве служит метод Store(). Восстановить объект из архива можно при помощи метода Load(). О том, как работают эти методы, мы поговорим при рассмотрении процесса сериализации.
Но, наверное, самым интересным полем является поле mjDNextClass. Судя по тому, что оно фактически является указателем на информацию времени исполнения, а также взглянув на название этого поля, можно догадаться, что все структуры типа CRuntimeClass объединены в однонаправленный список. Зная указатель на начало этого списка, мы можем получить информацию о том, какие классы зарегистрированы в системе.
Похожие статьи: Load
