Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
14-1081560795
Думкин
2004-04-10 05:33
2004.05.02
С днем рождения! 10 апреля.


14-1080920927
Lexer
2004-04-02 19:48
2004.05.02
Крым, море, горы


1-1082013961
Yanis
2004-04-15 11:26
2004.05.02
Cursors


3-1080926502
neVIP
2004-04-02 21:21
2004.05.02
Что такое IB и с чем его едят...


3-1080912855
FireStorm
2004-04-02 17:34
2004.05.02
Как подключиться к БД MYSQL в Дельфи?