Программирование на языке MFC

Мой второй блог в серии программирования

Переменная nClassIndex


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

#define wNewClassTag ((WORD)OxFFFF)

// special tag indicating new CRuntimeClass