Форум: "Corba";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
Внизstructured storage Найти похожие ветки
← →
Суслик © (2004-09-14 11:11) [0]Уважаемые мастера.
В настоящий момент я разбираюсь с технологией structured storage.
Т.к. эта тематика описана в разделе MSDN Component developing, то задаю вопрос в конференции по COM.
Как создать поток (stream), когда хранилище (storage) открыто в режиме STGM_SIMPLE.var
kHResult: HRESULT;
kStorage: IStorage;
kStream: IStream;
begin
// здесь я поставил флаги по MSDN и по Хармону - у него это явно написано.
kHResult := StgCreateDocfile(
"d:\temp\aaa",
STGM_DIRECT or STGM_SIMPLE or STGM_READWRITE or STGM_CREATE or STGM_SHARE_EXCLUSIVE,
0,
kStorage);
if Failed(kHResult) then
begin
raise Exception.CreateFmt("fail to create storage (error $%.8x)", [kHResult]);
end;
// Но! Я не нашел, где сказано с какими флагами открыать потоки :((
// Если с теми же, то ошибка на этой строке: STG_E_INVALIDFLAG = HRESULT($800300FF);
// Я пробовал разные (не все комбинации, правда) - все равно такая ошибка.
kHResult := kStorage.CreateStream(
"Workbook",
STGM_DIRECT or STGM_SIMPLE or STGM_READWRITE or STGM_CREATE or STGM_SHARE_EXCLUSIVE,
0,
0,
kStream);
if Failed(kHResult) then
begin
raise Exception.CreateFmt("fail to create stream (error $%.8x)", [kHResult]);
end;
end;
Заранее благодарен за ответ
← →
Гаврила © (2004-09-14 16:27) [1]Насколько я знаю ,системная реализация поддерживает ТОЛЬКО эксклюзивное открытие
← →
Суслик © (2004-09-14 16:28) [2]
> [1] Гаврила © (14.09.04 16:27)
У меня получается создать хранилище, но не получается создать поток.
я не понял твоего ответа :((
← →
Гаврила © (2004-09-14 16:31) [3]Ну так я и говорю - попробуй только STGM_SHARE_EXCLUSIVE
← →
Суслик © (2004-09-14 16:36) [4]
> [3] Гаврила © (14.09.04 16:31)
> Ну так я и говорю - попробуй только STGM_SHARE_EXCLUSIVE
Не помогает
kStorage.CreateStream(
"Workbook",
STGM_SHARE_EXCLUSIVE,
0,
0,
kStream);
Все равно дает ту же саму ошибку.
← →
Romkin © (2004-09-14 16:48) [5]У хранилища в первую очередь :)
← →
DiamondShark © (2004-09-14 16:57) [6]var
kStorage: IStorage;
kStream: IStream;
begin
OleCheck( StgCreateDocfile(
"zzz.stg",
STGM_SIMPLE or STGM_CREATE or STGM_READWRITE or STGM_SHARE_EXCLUSIVE,
0,
kStorage) );
OleCheck( kStorage.CreateStream(
"Workbook",
STGM_READWRITE or STGM_SHARE_EXCLUSIVE,
0,
0,
kStream) );
end;
← →
Суслик © (2004-09-14 16:57) [7]
> [5] Romkin © (14.09.04 16:48)
> У хранилища в первую очередь :)
Если я уберу simple у хранилища, но оставлю у потока, то создаваемые потоки не будут кратны 4кб (что есть признак того, что поток создан в режиме simple) - они остаются того размера, сколько в них записано. Из чего я делаю вывод, что с этом случае режим simple не установился.
← →
Суслик © (2004-09-14 17:01) [8]
> [6] DiamondShark © (14.09.04 16:57)
Премного благодарен :)))
Ты эту комбинацию флагов:
1) нашел перебором
2) прочел где (укажи, если не сложно)
← →
DiamondShark © (2004-09-14 17:04) [9]
> Суслик © (14.09.04 17:01) [8]
Перебором.
Но попал с первого раза :)
← →
Rouse_ © (2004-09-14 17:04) [10]Просто интересно, а для чего используешь STGM_SIMPLE?
Теряешь ведь в возможностях...
← →
Суслик © (2004-09-14 17:07) [11]
> [10] Rouse_ © (14.09.04 17:04)
Экспорт в biff8
Я не понял точно, но как мне кажется ексель пользуется именно режимом simplе (т.е. поток workbook всегда кратен 4кб). Опять же я не понял критично ли для него при чтении, чтобы файл был кратен 4кб или нет. Т.е. это все для перестраховки - хочется сделать как можно ближе к тому, что сохраняет сам ексель.
> [9] DiamondShark © (14.09.04 17:04)
Повезло.
Тоже перебирал, перебирал - на этот вариант так и не попал :)))
← →
Rouse_ © (2004-09-14 17:10) [12]> Суслик © (14.09.04 17:07) [11]
Хм, я без этого режима работаю, все равно есть выравнивание по 512 байт
← →
DiamondShark © (2004-09-14 17:12) [13]
> Суслик © (14.09.04 17:07) [11]
Я ж не сразу кинулся флаги переставлять.
← →
Суслик © (2004-09-14 17:27) [14]
> [13] DiamondShark © (14.09.04 17:12)
а что же ты сначал стал делать?
Доку читать?
Про создание потока в режиме simple я не видел никакого описания.
Страницы: 1 вся ветка
Форум: "Corba";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c