Форум: "KOL";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизKOL-программа вызывает ошибку Explorer-а Найти похожие ветки
← →
Ал (2003-10-16 10:25) [0]Знатоки!
Вопрос, к сожалению, носит очень общий характер.
Есть две кооперативные KOL-программы:
первая - небольшой планировщик, по заданному расписанию выполняющий несложные действия;
вторая - целевая программа, отображающая определенную информацию на экране, предоставляющая пользовательский интерфейс для себя и заодно - для планировщика.
Приводить код - неоправдано - его достаточно много.
В результате их работы иногда, без видимой системы возникает ошибка Explorera Win95, 98 (в XP - не наблюдал) и он закрывает некоторые окна (обычно окна просмотра папок), а также слетают некоторые программы из системного лотка, но не все).
Планировщик и целевая программа проверены memproof.
Есть небольшие утечки в функциях работы с массивами - из system.pas (сам не смог исправить), ошибка загрузки Icon в KOL (хотя она грузится) - в общем ничего глобального и грубого - как мне кажется. Память, потребляемая ими, динамически не разрастается - вроде все аккуратно.
Целевая программа работает с изображениями и интерфейсом IActiveDesktop.
Возможно, съедается память (обычно одновременно работаю с Delphi и др.), возможно, еще что-то.
Обращаюсь к вашему опыту, знатоки.
Какие причины могут вызывать ошибку Explorer-а с закрытием части окон?
И что можно порекомендовать в качестве профилактики?
← →
SPeller © (2003-10-16 15:41) [1]Возможно, виноват интерфейс IActiveDesktop, точнее переходник к нему. Кто-то тут занимается интерфейсами в КОЛ, попробуйте с ним поискать проблему.
> И что можно порекомендовать в качестве профилактики?
Проверить весь код на утечки/ошибки/сбои/недочёты при работе в указателями.
← →
Boguslaw (2003-10-17 01:29) [2]OleInitialize ?
← →
Ал (2003-10-17 09:16) [3]Спеллеру:
memproof дает сообщение об утечках при AllocMem в процедуре System.DynArraySetLength (у меня используется SetLength динамических массивов). Думаю, это происходит в куске
// If the heap object isn"t shared (ref count = 1), just resize it. Otherwise, we make a copy
if (p = nil) or (PLongint(p)^ = 1) then
begin
pp := p;
if (newLength < oldLength) and (typeInfo <> nil) then
FinalizeArray(PChar(p) + Sizeof(Longint)*2 + newLength*elSize, typeInfo, oldLength - newLength);
ReallocMem(pp, neededSize);
p := pp; <------ Думаю, после этого нужно освободить PP?
end
Пробовал переопределить эту функцию у себя в проекте - не находит FinalizeArray. В общем - не получилось.
И еще: оба кооперативных приложения работают с общей БД, созданной на движке StrDb (из раздела "Базы данных и печать" bonanzas.rinet.ru).
memproof в приложении-планировщике ругается на утечку в указателе в операторе МояБазаДанных.First, а в целевой программе этот оператор ее не смущает.
И наоборот, в целевой программе указывает на утечки в операторах
МояБазаДанных.AddFldDef, а такие же операторы в планировщике проходят. ???
Богуславу:
D6, Win95, 98, 2000, XP.
Поскольку в D6 в секции инициализации CoInitialize(nil) не вызывается, вызываю CoInitialize(nil) при создании главной формы.
CoUninitialize() вызываю в событии Applet.OnDestroy.
Работа с IActiveDesktop идет через API - KOL, вроде бы, ни при чем?
← →
Boguslaw (2003-10-17 13:21) [4]Did You try OleInitialize(nil) in initialization section (and remember of OleUninitialize in finalization) just to be sure ? It calls CoInitialize(nil) internally but is something more specific to OLE. Just try it, please - sometimes it"s a kind of magic.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.032 c