Всем привет!!
Нужнен пример вызова формы с внешней DLL
может кто нибудь подкинуть ссылку
или написать как реализовуется
[Решено] Форма во внешней DLL
Модератор: Модераторы
В общем и в целом, реализуется без каких-либо проблем. Создаётся проект "библиотека", в него добавляется форма, экспортируется процедура, создающая эту форму... А далее - дело техники.
Сложности возникают при попытке передачи "скрытых указателей" (строк и динамических массивов), в этом случае лучше осуществлять передачу простыми указателями, а в библиотеке при необходимости преобразовывать.
Могут возникнуть проблемы (хоть и разрешимые) при необходимости использования классов, определённых в самой библиотеке. Здесь есть 4 пути: надёжный - просто их не использовать напрямую, а только через экспортируемые процедуры, реальный - создав абстрактный класс и там, и там, инициализировав его с помощью процедуры из библиотеки и использовав абстрактные методы в программе, "тупой" - продублировать класс и в библиотеке, и в программе, и интерфейсный.
Сложности возникают при попытке передачи "скрытых указателей" (строк и динамических массивов), в этом случае лучше осуществлять передачу простыми указателями, а в библиотеке при необходимости преобразовывать.
Могут возникнуть проблемы (хоть и разрешимые) при необходимости использования классов, определённых в самой библиотеке. Здесь есть 4 пути: надёжный - просто их не использовать напрямую, а только через экспортируемые процедуры, реальный - создав абстрактный класс и там, и там, инициализировав его с помощью процедуры из библиотеки и использовав абстрактные методы в программе, "тупой" - продублировать класс и в библиотеке, и в программе, и интерфейсный.
Последний раз редактировалось daesher 11.03.2012 18:01:03, всего редактировалось 1 раз.
Пробовал даже без бередачи параметров
При отображении формы из DLL валится вся програ
При отображении формы из DLL валится вся програ
cepreu писал(а):При отображении формы из DLL валится вся програ
Каким образом создавалась форма в dll?
"Сваянная" напрямую программа работает до закрытия формы.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо:
Пример работает:
разница в том что у меня был
в рабочем:
procedure ShowForm;
begin
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Application.Run;
end;
что был в книге и на просторах нета:
Procedure ShowForm (Appl, Form: THandle);
Begin
// Application.MainForm.Handle := Appl; // раскоментировать для Lazarus
// Application.Handle := Appl; // раскоментировать для Delphi
DllForm := TDllForm.Create(Application);
DLLForm.Show;
end;
Добавлено спустя 7 минут 49 секунд:
Всем спасибо проблема решена
Пример работает:
разница в том что у меня был
в рабочем:
procedure ShowForm;
begin
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Application.Run;
end;
что был в книге и на просторах нета:
Procedure ShowForm (Appl, Form: THandle);
Begin
// Application.MainForm.Handle := Appl; // раскоментировать для Lazarus
// Application.Handle := Appl; // раскоментировать для Delphi
DllForm := TDllForm.Create(Application);
DLLForm.Show;
end;
Добавлено спустя 7 минут 49 секунд:
Всем спасибо проблема решена
День добрый
решил попробовать работать с фреймами вызываемыми из динамически подключенной библиотеки через интерфейсы, набросал небольшой пример. В принципе библиотека загружается, но ведет себя не совсем понятно.
В Linux - фрейм загружается, данные между основной программой и библиотекой передаются, но при выгрузки библиотеки основное приложение закрывается, в консоли чисто.
В Windows - фрейм не загружается, данные между основной программой и библиотекой передаются,библиотека выгружается, но потом вылетает ошибка обращения к данным.
Наставьте на путь истинный, в чем проблема.
p.s. проверял в AltLinux 6, win xp sp2
lazarus 0.9.31 fpc 2.4.4
решил попробовать работать с фреймами вызываемыми из динамически подключенной библиотеки через интерфейсы, набросал небольшой пример. В принципе библиотека загружается, но ведет себя не совсем понятно.
В Linux - фрейм загружается, данные между основной программой и библиотекой передаются, но при выгрузки библиотеки основное приложение закрывается, в консоли чисто.
В Windows - фрейм не загружается, данные между основной программой и библиотекой передаются,библиотека выгружается, но потом вылетает ошибка обращения к данным.
Наставьте на путь истинный, в чем проблема.
p.s. проверял в AltLinux 6, win xp sp2
lazarus 0.9.31 fpc 2.4.4
У вас нет необходимых прав для просмотра вложений в этом сообщении.
