![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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