Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2003.07.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
4-31568
DNT
2003-05-09 22:48
2003.07.10
Чужой statusbar


14-31396
Dmitriy O.
2003-06-20 09:19
2003.07.10
Пиво мастера Delphi


3-31082
Oleg-owl
2003-06-15 03:20
2003.07.10
SQL и вычисляемые поля


1-31294
CTAPbIi
2003-06-26 15:04
2003.07.10
Как наиболее просто загрузить Icon из exe-файла?


1-31337
Ivan Voronov
2003-06-27 12:44
2003.07.10
TShellListView и что-то подобное