Структура 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, этот флаг должен быть равен нулю.
Если LayoutType — STGTY_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}}
};
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
Верхняя часть | objidl.h |