Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.46 MB
Время: 0.008 c
1-31329
Um
2003-06-25 06:44
2003.07.10
inherited inherited;


11-31165
Gandalf
2002-10-29 19:59
2003.07.10
KOLnMCK 1.56


1-31336
Jao
2003-06-27 09:32
2003.07.10
Фильтр для файлов в ShellListView1


1-31304
maxic
2003-06-26 16:40
2003.07.10
Динамическая загрузка DLL


14-31514
picaroon
2003-06-25 10:01
2003.07.10
Помогите кто чем может с кодом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский