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

Вниз

Про динамическую загрузку DLL   Найти похожие ветки 

 
Zergg ©   (2002-02-20 12:18) [0]

Написана DLL в которой одна форма с стандартным приглашением Login для всех задач.

DLL загружается в OnCreate для главного DataModule
DataModule создается раньше MainForm
При загрузке использую LoadLibrary
Дальше GetProcAddress
Потом вызываю ф-цию из DLL которая и показывает форму.
После этого ф-ция форму освобождает, предварительно возвратив заполненую структуру.
Затем делаю FreeLibrary
Затем подключаемся к основной базе с параметрами из сруктуры.
Затем создается главная форма.
И вот тут примерно через 1-2 сек после отображения формы выскакивает Access violation at 0xЧегото-там read of address 0xТожесамое.
Пробовал вызывать ф-цию из DLL уже после создания главной формы, результат тот-же.
Главная форма пока пустая. Совсем пустая.
В чем проблема? Может кто подскажет?
Причем если делать FreeLibrary из DataModule.OnDestroy, т.е. в конце программы, то все работает без проблем.
Все это под Win2k, на других не проверял.
PS: Если запустить скомпиленое приложение не из Delphi то оно просто закрывается. Т.е. главная форма мигает и никакого сообщения об ошибке!


 
Fellomena   (2002-02-20 12:54) [1]

Попробуй статическое подключение - если данный баг исчезнет - делай выводы 8)


 
Zergg ©   (2002-02-20 12:59) [2]

При статическом подключении баг исчезает.
Но хотелось бы и память освободить после использования формы.
А то на многих машинах по 16 мегабайт мозгов!


 
Fellomena   (2002-02-20 13:06) [3]

Забавно...
попробуй при вызове ф-ий DLL использовать не stdcall, а safecall - это тот же stdcall, только обрамляет всю DLL конструкцией try... finally
Так же при загрузке и освобождении DLL проверяй возвращаемые этми ф-ями значения.


 
kaif ©   (2002-02-20 13:09) [4]

А форма-то, вызываемая из DLL модальная? Если нет, то ее оконная процедура у тебя уничтожается до того, как начнет получать сообщения системы. Любое движение мыши или еще какое сообщение придет, а оконная процедура дано тавось (из-за FreeLibrary)... Если форма модальная, то такого быть не должно. Вообще-то, если покопаться, разберешься. Если приложение однопоточное, то всегда ошибку можно легко найти, так как она устойчивая. А статическое подключение меняет саму логику, так как не делает FreeLibrary в этот момент.
Посмотри пошагово, по времени, когда FreeLibrary происходит, до или после сбоя? Если до, то это что-то вроде того, что я предполагаю.


 
Zergg ©   (2002-02-20 13:21) [5]

При загрузке проверял. Все в норме.
Проверил при FreeLibrary. Говорит True. Типа освободил.
Да! Sharemem в uses повтыкал и в DLL и в приложении.
У меня подозрение что Application пытется обратиться модулю формы. А его уже и нету.
Мож покопаться с исходниками.


 
Zergg ©   (2002-02-20 13:26) [6]

kaif
Приложения пока еще вообще нет, только пустая форма.
Т.е. сложного кода нет и в помине!
Форма вызывается модальная.
Отрабатывает все. Библиотека освобождается без ошибок и главная форма создается без ошибок. И даже отображается без ошибок.
Но наверное когда запускается обработчик очереди сообщений то и возникает эта проблема. Т.е. через некоторое время, ~1 сек, может меньше



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.015 c
14-19336
Nimda
2002-01-22 08:21
2002.03.07
Проигрыватель.


4-19377
iXANiA
2002-01-04 15:57
2002.03.07
Как спрятать окно чужого приложения?


6-19288
greenrul
2001-12-21 17:36
2002.03.07
Помогите с отсылкой POST из программы в скрипт


14-19326
Геннадий Михалев
2002-01-19 18:29
2002.03.07
Вопрос коммерч. характера.


3-19104
tovSuhov
2002-02-11 11:40
2002.03.07
Набор команд SQL