Поделиться через


Структура StorageLayout (objidl.h)

Структура StorageLayout описывает один блок данных, включая его имя, расположение и длину. Чтобы оптимизировать составной файл, приложение или средство макета передает массив структур StorageLayout в вызове ILayoutStorage::LayoutScript.

Синтаксис

typedef struct tagStorageLayout {
  DWORD         LayoutType;
  OLECHAR       *pwcsElementName;
  LARGE_INTEGER cOffset;
  LARGE_INTEGER cBytes;
} StorageLayout;

Члены

LayoutType

Тип записываемого элемента. Значения взяты из перечисления STGTY . STGTY_STREAM означает чтение блока данных с именем pwcsElementName. STGTY_STORAGE означает открытие хранилища, указанного в pwcsElementName. STGTY_REPEAT используется в мультимедийных приложениях для взаимодействия со звуком, видео, текстом и другими элементами. Открывающее значение STGTY_REPEAT означает, что следующие элементы должны повторяться указанное число раз. Закрывающее значение STGTY_REPEAT обозначает конец повторяемых элементов. Допускаются вложенные пары STGTY_REPEAT значений.

pwcsElementName

Строковое имя в Юникоде, завершающееся null, для хранилища или потока. Если элемент является вложенным или внедренным объектом, необходимо указать полный путь к хранилищу; Например, "RootStorageName\SubStorageName\Substream".

cOffset

Если значение элемента LayoutType равно STGTY_STREAM, этот флаг указывает начальное смещение в паре с именем в элементе pwscElementName .

Если LayoutTypeSTGTY_STORAGE, этот флаг должен быть равен нулю.

Если LayoutTypeSTGTY_REPEAT, этот флаг должен быть равен нулю.

cBytes

Длина (в байтах) блока данных с именем в pwcsElementName.

Если LayoutType имеет значение STGTY_STREAM, cBytes указывает количество байтов для чтения в cOffset из потока с именем pwcsElementName.

Если LayoutTypeSTGTY_STORAGE, этот флаг игнорируется.

Если LayoutType имеет значение STGTY_REPEAT, положительный cBytes указывает начало блока повтора. STGTY_REPEAT с нулевым значением cBytes обозначает конец блока повтора.

Начальное значение блока STG_TOEND указывает, что элементы в следующем блоке должны повторяться после полного считывания каждого потока.

Комментарии

Массив структур StorageLayout может выглядеть следующим образом.

StorageLayout arrScript[]=
    // Read first 2k of "WordDocument" stream
    {STGTY_STREAM,L"WordDocument",{0,0},{0,2048}},
 
    //Test if "ObjectPool\88112233" storage exists
    {STGTY_STORAGE,L"ObjectPool\\88112233",{0,0},{0,0}},
 
    //Read 2k at offset 1048 of "WordDocument" stream
    {STGTY_STREAM,L"WordDocument",{0,10480},{0,2048}},
 
    //Interlace "Audio", "Video", and "Caption" streams
    {STGTY_REPEAT,NULL,0,STG_TOEND},
        {STGTY_STREAM,L"Audio", {0,0},{0,2048}},    // 2k of Audio
        {STGTY_STREAM,L"Video", {0,0},{0,65536}},   // 64k of Video
        {STGTY_STREAM,L"Caption", {0,0},{0,128}},   // 128b of text
    {STGTY_REPEAT,NULL, {0,0},{0,0}}
};
Примечание Параметры cOffset и cBytes являются LARGE_INTEGER структурами, используемыми для представления 64-разрядного целочисленного значения со знаком в виде объединения двух 32-разрядных элементов. Два 32-разрядных элемента должны быть представлены в виде LARGE_INTEGER структуры с DWORD LowPart и LONG HighPart в качестве элементов структуры. (LowPart указывает 32 бита низкого порядка, а HighPart — 32 бита высокого порядка.) Если компилятор имеет встроенную поддержку 64-разрядных целых чисел, используйте элемент QuadPartструктуры LARGE_INTEGER для хранения 64-разрядного целого числа.
 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Верхняя часть objidl.h

См. также раздел

ILayoutStorage::LayoutScript