Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 686

Раздел: Delphi » Прочее
/ вопрос открыт /

Приветствую, уважаемые эксперты!

У меня проблемы с загрузкой формы из DLL. Моя программа (сам EXE) не имеет никаких окон. Есть общий модуль с описанием интерфейсов для плагина и главного приложения. В плагине лежит форма с разными визуальными компонентами. DLL загружается естественно динамически. Сама загрузка и выгрузка работает, но форма похоже не получает все сообщения. Например, компонент кнопка (не стандартная) не получает сообщения о уходе мыши из её области. Так же не каботаем XPManifest который стоит на форме DLL.

В чём может быть проблема?

Пробывал скачивать проект с MDI формами из DLL и ставить туда свою кнопку, но она всё равно не получает сообщения. Сама кнопка работает, уже проверена временем.

Виталий Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Виталий (статус: 2-ой класс)
Вопрос отправлен: 26 апреля 2009, 14:09
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 28 апреля 2009, 19:37; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 26 апреля 2009, 18:34 [#1]:

Да, есть такое. Более того, к примеру StringGrid не полностью отрабатывает. И есть только два решения - написать свою библиотеку или использовать чистое АПИ. Формы в длл - плохая идея. Да, оно работает, обложив костылями, но ... библиотека VCL не проектировалась для работы в длл. Поэтому так и работает. Можно сесть и переписать библиотеку.
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 26 апреля 2009, 18:44 [#2]:

Проблема в том, что у меня нет лишних 3-5 лет жизни, чтобы переписывать VCL. :)
А как мне можно ещё хранить формы не зависимо от приложения? Иными словами, как сделать поддержку плагинов с любыми формами?
Вадим К

Вадим К (статус: Академик), 26 апреля 2009, 19:37 [#3]:

WinAPI или использовать bpl. Вот там хранить формы самое оно. Так кстати делает и среда делфи.
Преимущества:
- можно передавать строки, объекты, массивы через границу приложение - bpl.
- можно динамически подгружать классы и использовать их.
- формы работают как родные.
- можно использовать делфовские bpl и добавив их на 2-3 Мб, можно получать приложение на 30-40 кб и свои bpl такого же размера.
Недостатки:
- Привязанность к версии. То есть, если основное приложение скомпилированно в 7 делфи, то все bpl тоже должны быть в ней скомпилированы. Хотя поговаривают, что 2006 и 2007 делфи совместимы.
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 26 апреля 2009, 19:51 [#4]:

Я так уже и сделал : через bpl, но обнаружил другую проблему. Использование одних и тех же модулей в пакетах. Так как плагины выполняют выполняют неопределённую цель (она просто может быть любой), я не могу поместить все общие модули в один пакет, я просто не знаю какие могут понадобиться модули. А у плагинов будет открытый SDK, так что вероятность попадания одних и тех же модулей очень высока!

Может я конечно что-то и путаю, я с динасическими bpl пакетами только начал работать.
Виталий

Виталий (статус: 2-ой класс), 26 апреля 2009, 19:55 [#5]:

Я сделал проверку : поместил 2 одинаковых модуля под разными именами и запустил прогу. Делфи мне говорит, что дублируется модуль.
Вадим К

Вадим К (статус: Академик), 26 апреля 2009, 20:04 [#6]:

А что понимается под словом "модуль"? Юнит?
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 27 апреля 2009, 05:42 [#7]:

Да. Не знаю почему, но называю иногда их так.
Виталий

Виталий (статус: 2-ой класс), 27 апреля 2009, 19:13 [#8]:

Вопрос : а почему не рекомендуется ханить формы в dll? А как ещё делать? Вариантов то больше нет.
Вадим К

Вадим К (статус: Академик), 27 апреля 2009, 19:36 [#9]:

потому что их не проектировали для этого. просто не предполагалось подобное поведение. Мне кажеться, что это просто достаточно сложно сделать качествено. Почему? Мне часть причин понятна, но они слишком сложны, что бы объяснять на пальцах.
Дублирование... По моему, если я правильно помню, дублируются классы. Решается выносом в отдельный bpl.
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 27 апреля 2009, 20:01 [#10]:

Дело в том, что я не могу узнать заранее какие модули будут в разных плагинах. Проблема в том, что юниты имеют одинаковое имя. Я проверил. Сделал новый проект и поменял имена у юнитов, оставив содержимое такое же.
Что делать? Дать указание будущим разработчикам плагина называть модули по особому?
Вадим К

Вадим К (статус: Академик), 27 апреля 2009, 20:25 [#11]:

Ну если всё так печально (хотя странно, не должно быть так - как бы тогда среда делфи могла работать), можно сделать указание, что имя юнита должно начинаться с названия фирмы:) и всех делов.
Галочка "подтверждения прочтения" - вселенское зло.
Виталий

Виталий (статус: 2-ой класс), 28 апреля 2009, 12:13 [#12]:

Может быть в delphi есть какие-то особые настройки пакетов?
Виталий

Виталий (статус: 2-ой класс), 28 апреля 2009, 15:19 [#13]:

Ну, наверное придётся говорить, чтобы все юниты начинались с названия плагина, т.к. их названия, наверника, будут разные. Но вопрос остаётся открытым.
DNK

DNK (статус: Студент), 28 апреля 2009, 18:51 [#14]:

Виталий! Неужели эта программы настолько золотая, что все ринутся писать для неё плагины? У меня аж зубы сводит, где я жилу прошляпил?

Как вариант на раз могу предложить использовать не плагины, а скрипты. Готовые движки для делфи существуют.
На два поискать готовую замену VCL. Как минимум одну я в свое время встречал. Может они будут лишены этих недостатков.
Ну и на три приучайте будущую армию разработчиков использовать в бпл составные имена юнитов и вашу любимую версию делфи. Интерфейс ведь плагинов тоже не принято нарушать. Нарушителей линчевать.
"Digital Networked Knight"
Виталий

Виталий (статус: 2-ой класс), 28 апреля 2009, 19:37 [#15]:

Нет, она ещё пока не золотая, но позже может быть). Просто для обеспечения почти безграничного расширения, нужно начинать с самого начала думать.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.02 сек.