Программирование на языке 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), а затем двойное слово, содержащее индекс объекта.

Похожие статьи: