Добавление к ответам об использовании пакетов:
- Пакеты могут использоваться только в том случае, если и основное приложение, и все dll (плагины) написаны на Delphi , а написаны с использованием одной и той же версии Delphi
- Библиотеки DLL могут быть написаны на любом языке программирования, который может их создавать, и может использоваться любой программой независимо от языка программирования
Итак, использование dlls, а не пакетов, имеет смысл.
Относительно самого вопроса: да, в dll можно помещать формы, и они обычно работают нормально. Просто убедитесь, что вы не передаете их, потому что они являются только действительными объектами в контексте библиотеки DLL. Вы будете испытывать странные проблемы с формами, теряющими фокус или отстающими от других форм. Обычно это можно исправить, передав дескриптор окна из основного исполняемого файла в dll, который затем используется как родительский для формы.
Также обратите внимание: TObject вашего dll отличается от TObject вашего приложения. То же относится и к другим часто используемым классам и переменным, таким как (Forms.) Application.
Я сделал это, и это была боль в пояснице, но это было не невозможно. Основная программа была написана на Visual Basic 6, некоторые модули были написаны на Delphi 6, другие написаны на Delphi 7 и Delphi 2007.
Вывод: если вы уверены, что никогда не будете использовать что-то отличное от Delphi для своего приложения и для ваших dll (плагинов) и готовы всегда перекомпилировать все, когда вы переключаете версии Delphi, вам следует использовать пакеты. В противном случае может быть лучше использовать обычные библиотеки DLL. (И вы уверены, что вы всегда будете единственным, кто пишет эти dll? Может быть, когда-нибудь будет сторонний разработчик для одного из dll, у которого нет нужной ему версии Delphi.)