Главная страница
    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.009 c
3-31161
snake1977
2003-06-17 16:49
2003.07.10
Внешние соединения


3-31145
Rel_
2003-06-18 16:39
2003.07.10
считывание данных из таблицы (.dbf)


7-31534
Ufo
2003-04-28 09:47
2003.07.10
WinXP


1-31231
SeAl
2003-06-26 14:05
2003.07.10
нужна помощь с переводом из real в integer


14-31455
Vlad Oshin
2003-06-24 08:21
2003.07.10
Отключил драйвер и черный экран. Вин XP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский