Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];

Вниз

Про динамическую загрузку 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
1-19180
Alexandr_
2002-02-18 14:18
2002.03.07
Как переопределить метод OnResize


14-19340
alexproger
2002-01-19 18:32
2002.03.07
Где найти программу


1-19226
maks_f
2002-02-18 10:11
2002.03.07
Свойства объекта


14-19300
vladislav
2002-01-20 18:22
2002.03.07
Инсталляция Delphi


3-19049
yaJohn
2002-02-07 17:05
2002.03.07
DBGrid





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