Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
14-31484
Влад
2003-06-20 10:44
2003.07.10
телефония


14-31403
sapsi
2003-06-18 08:55
2003.07.10
---|Ветка была без названия|---


3-31155
n1tro
2003-06-19 06:44
2003.07.10
Помогите с запросом


14-31496
ianus
2003-06-24 17:42
2003.07.10
Tmediaplayer ????? - NO!


3-31074
wild_arg
2003-06-14 23:17
2003.07.10
User Defined Function (UDF)




   Наверх