Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

COM интерфейс IStorage. Help! [D7, Win95/98, WinME, NT4, Win2k, WinXP]


K_O_T ©   (2003-05-06 22:35:00) 

В одном месте кода (и на Delphi и на С++) возникает ошибка!
Вот кусок кода:
//TBase это самописный класс
procedureTBase.LoadBase(Filename: string);
varEnumStatSTG:IEnumStatStg;
StatSTG:TStatStg;
begin
OleCheck(StgOpenStorage(StringToOleStr(Filename), Nil,STGM_WRITE or STGM_READ or STGM_SHARE_EXCLUSIVE, nil,0,FCurrStorage));

OleCheck(FCurrStorage.EnumElements(0, nil,0,EnumStatSTG));
(*EnumStatSTG остается nil..ТУТ вылазит аксес вайолэйшн*)
whileEnumStatSTG.Next(3,StatSTG,0) = S_OK do
begin
//Some Stuff
end;
end;

При вызове FCurrStorage.EnumElements(...) EnumStatSTG остается nil.
В чем ошибка. Тоже повторяется и на C++


K_O_T   (2003-05-08 17:17:00) [1]

Сорри. Сержбыл прав. Спасибо.
Я потом лохонулся, когда трэйсил:
begin
OleCheck(StgOpenStorage(StringToOleStr(Filename),Nil,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,FCurrStorage));

FCurrStorage.EnumElements(0,nil,0,EnumStatSTG);
(*тут код был закоментирован! После выполнение EnumElements перепрыгивал на end;и,наверное, высвобождал EnumStatSTG...поэтому он у меня был nil! Я не успевал его застать еще живым:) *)
end;


K_O_T   (2003-05-08 16:06:00) [2]

Всеравно не работает :(
И ничего не возвращает!
HRESHULT остается [минимальное значения integer]!


Серж   (2003-05-07 15:18:00) [3]

STGM_READ = $00000000;
STGM_WRITE = $00000001;
значит, STGM_WRITE or STGM_READ == STGM_WRITE = $00000001;
используй одну константу
STGM_READWRITE = $00000002
и всё заработает - проверил только что. Успехов.


крот   (2003-05-07 14:18:00) [4]

2 K_O_T © (07.05.03 12:39).

Я вообще то имел ввиду программную проверку - получить HRESULT и проанализировать значение.


K_O_T   (2003-05-07 12:39:00) [5]

to крот:
на EnumElements дебаггер подвисае немогу проверить:)
SoftIce"ом попробую;)


крот   (2003-05-07 05:57:00) [6]

У меня почти анологичный код и все работает. Правда, в функции EnumElements я передаю 0 вместо nil. Вряд ли в этом дело, но попробуйте, чем черт не шутить. А еще я бы все же не доверял OleCheck и проверил "руками" ЧТО возвращает EnumElements - неужели S_OK и при этом не заполняет EnumStatSTG


Наверх

Титульная страница Поиск, карта сайта Написать письмо