Форум: "WinAPI";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизCOM интерфейс IStorage. Help! Найти похожие ветки
← →
K_O_T (2003-05-06 22:35) [0]В одном месте кода (и на Delphi и на С++) возникает ошибка!
Вот кусок кода:
//TBase это самописный класс
procedure TBase.LoadBase(Filename: string);
var EnumStatSTG: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..ТУТ вылазит аксес вайолэйшн*)
while EnumStatSTG.Next(3,StatSTG,0) = S_OK do
begin
//Some Stuff
end;
end;
При вызове FCurrStorage.EnumElements(...) EnumStatSTG остается nil.
В чем ошибка. Тоже повторяется и на C++
← →
крот (2003-05-07 05:57) [1]У меня почти анологичный код и все работает. Правда, в функции EnumElements я передаю 0 вместо nil. Вряд ли в этом дело, но попробуйте, чем черт не шутить. А еще я бы все же не доверял OleCheck и проверил "руками" ЧТО возвращает EnumElements - неужели S_OK и при этом не заполняет EnumStatSTG
← →
K_O_T (2003-05-07 12:39) [2]to крот:
на EnumElements дебаггер подвисае немогу проверить:)
SoftIce"ом попробую;)
← →
крот (2003-05-07 14:18) [3]2 K_O_T © (07.05.03 12:39).
Я вообще то имел ввиду программную проверку - получить HRESULT и проанализировать значение.
← →
Серж (2003-05-07 15:18) [4]STGM_READ = $00000000;
STGM_WRITE = $00000001;
значит, STGM_WRITE or STGM_READ == STGM_WRITE = $00000001;
используй одну константу
STGM_READWRITE = $00000002
и всё заработает - проверил только что. Успехов.
← →
K_O_T (2003-05-08 16:06) [5]Всеравно не работает :(
И ничего не возвращает!
HRESHULT остается [минимальное значения integer]!
← →
K_O_T (2003-05-08 17:17) [6]Сорри. Серж был прав. Спасибо.
Я потом лохонулся, когда трэйсил:
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;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c