

Программирование на языке MFC
Мой второй блог в серии программирования
Переменная nClassIndex
Методу в качестве аргумента передается указатель на информацию времени исполнения объекта. Что же делает этот метод? В самом начале своей работы он проверяет номер схемы объекта. Если номер схемы равен -1, это означает, что объект се-риализовать нельзя. Естественно, в таком случае тут же вырабатывается исключение. Затем производится вызов метода MapObject() с аргументом NULL, т. е. инициализируется хэш-таблица, связанная с архивом. Вспомните, я уже говорил, что вызов этого метода с аргументом, равным NULL, абсолютно безопасен, максимум, что он делает, это создает и инициализирует хэш-таблицу. А затем начинается интересное. Метод выбирает из хэш-таблицы значение, соответствующее указателю на информацию времени исполнения объекта, а затем присваивает это значение переменной nClassIndex. Естественно, у читателя возникает вопрос – а почему речь зашла о каком-то индексе класса, а не об указателе? Но для того чтобы ответить на этот вопрос, нам нужно узнать, что записывается в хэш-таблицу. Думаю, мы скоро это узнаем. А пока давайте разберемся с тем, что произойдет в том случае, если элемент с ключом, равным указателю на объект, не найден в таблице. Прежде всего, это будет означать, что информация об объекте в таблицу не записывалась и мы производим запись объекте, ранее в архив не записанного. В этом случае метод WriteClassQ записывает в архив значение wNewClassTag, определенное в файле arcobj.cpp следующим образом:
#define wNewClassTag ((WORD)OxFFFF)
// special tag indicating new CRuntimeClass
