Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1080979672
Belkova
2004-04-03 12:07
2004.05.02
Как обновить д-е во всех приложениях


14-1081590683
Инкогнито
2004-04-10 13:51
2004.05.02
А солнышко играет...


1-1082036755
highlander
2004-04-15 17:45
2004.05.02
Печать на матричном принтере.


8-1075134301
ST
2004-01-26 19:25
2004.05.02
FFT


3-1081008260
Balepa
2004-04-03 20:04
2004.05.02
Ошибка DBCombobox





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