Главная страница
    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.45 MB
Время: 0.008 c
1-31355
Anonimus
2003-06-27 15:42
2003.07.10
TBitmap в array of Byte


1-31216
Far
2003-06-28 23:06
2003.07.10
Format vs Mask


14-31463
Malder
2003-06-16 23:19
2003.07.10
Программа для печати платежек


1-31174
Edvard
2003-06-27 14:56
2003.07.10
Проблема с считыванием из файла и заполнением ListBox


4-31574
Sliski Slimak
2003-05-12 09:09
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский