

Программирование на языке MFC
Мой второй блог в серии программирования
Значение wBigObjectTag
Двойное слово будет записано в архив в том случае, если индекс класса превышает 0×7fff. В этом случае сначала в архив записывается значение wBigObjectTag, которое определено в файле arcobj.cpp следующим образом:
#define wBigObjectTag ((WORD)0×7FFF)
// 0×7FFF indicates DWORD object tag
Затем в архив будет записан результат логического сложения индекса класса и величины dwBigClassTag, определенной в файле arcobj.cpp так:
#define dwBigClassTag ((DWORD)0×80000000)
// 0×8000000 indicates big class tag (OR’d)
На этом работа метода WriteClass() заканчивается. Пора возвратиться к рассмотрению метода WriteObject^). После вызова метода WriteClass() метод WriteObject() проверяет при помощи метода CheckCount() число элементов в хэш-таблице, записывает в хэш-таблицу с ключом, равным указателю на объект, ИНДЕКС объекта (после подробного рассмотрения метода WriteClassQ читателю должно быть понятно, о каком индексе я говорю), а затем вызывает метод Serialize() объекта, записываемого в архив.
В том случае, если метод WriteObject() нашел в хэш-таблице элемент с ключом, равным указателю на записываемый в архив объект, он принимает решение о том, что информация об объекте уже записывалась в архив и действует в соответствии с принципами, которые применяются в методе WriteClass(), т. е. записывает в архив слово или слово и двойное слово. Как и в методе WriteClass(), слово записывается в том случае, если индекс объекта не превышает значения wBigObjectTag. В архив в таком случае сбрасывается слово, содержащее индекс объекта. Это слово ВСЕГДА будет МЕНЬШЕ wBigObjectTag (0×7fff). В противном случае сначала в архив сбрасывается значение wBigObjectTag (0×7fff), а затем двойное слово, содержащее индекс объекта.
Похожие статьи: Значение wBigObjectTag
