Форум: "Основная";
Текущий архив: 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