Добавляется после дополнительных св-в (только OLE, диаграммы).
Длина 42(для прервого)/24(для остальных) байта + OLE.
Очевидно, данные для OLE-объекта представляют собой продукт «сериализации» (метод Serialize) объекта типа CSheetCntrItem – наследника COleClientItem. Кстати, существование этого класса нельзя обнаружить при анализе символьной информации, т.к. он ниоткуда не экспортируется. :)
Смещение | Длина | Знач. | Комментарий | По умолч. |
начало (длина = 2) | ||||
0x00 | 2 | 0xffff 0x8001 | - Есть runtime class description – Нет | |
runtime class description для класса CSheetCntrItem (длина = 4+14), встречается только в первом OLE, см. CRuntimeClass::Store(CArchive& ar), есть, только при 0x00 = 0xffff. runtime class description – должно быть в файле хотя бы один раз, описание можно приписывать к каждому OLE-объекту – это не влияет на корректность загрузки файла Мокселем | 0x00 | |||
0x00+2 | 2 | 0 | CRuntimeClass::m_wSchema | 0x00 |
0x00+4 | 2 | дл_об | Длина названия класса (всегда 0x0e) lstrlenA(CRuntimeClass::m_lpszClassName) | |
0x00+6 | дл_об | Название класса, всегда CSheetCntrItem, CRuntimeClass::m_lpszClassName | CSheetCntrItem | |
продолжение – продукт работы COleClientItem::Serialize () (длина = 22) | ||||
0x00 | 4 | 0x100 | 256 – тип объекта, перечисление OLE_OBJTYPE, 256 – это OT_OLE2 | 0x00000100 |
0x04 | 4 | Порядковый номер записи CSheetCntrItem (m_dwItemNumber), от рис. к рис. увеличивается на 2 или 3 | ||
0x08 | 4 | 1 – для OLE 0x0012f150 – для «Диаграммы» Это dwAspect, полученный через вызов IOleView2->Get Advise?(&dwAspect, NULL, &pAdviseSink). Может принимать значения перечисления DVASPECT и DVASPECT2. 1 означает DVASPECT_CONTENT. Что сюда кладется для диаграммы – не ясно. | ||
0x0с | 2 | 0 | m_bMoniker – write flag indicating whether to create moniker upon load | 0x0000 |
0xe | 4 | 1 | m_nDrawAspect – DVASPECT и DVASPECT2. DVASPECT_CONTENT | 0x00000001 |
0x12 | 4 | длOLE | Длина OLE объекта | |
0x12+1 | длOLE | Содержимое IPersistStorage для объекта |