Первый вопрос, который я хотел бы задать: нужны ли плагины для доступа к пользовательскому интерфейсу вашего хост-приложения или для добавления каких-либо собственных элементов пользовательского интерфейса? Или плагины будут ограничены запросом и / или передачей данных вашему хост-приложению?
Последнее намного проще и открывает две возможности. Другие уже упоминали библиотеки DLL, и это первый путь. Применяются определенные предостережения - обычно вы должны взаимодействовать с DLL, используя только те типы данных, которые используются в Windows API. Таким образом, вы можете быть уверены, что библиотеки плагинов будут понимать ваши типы данных, независимо от того, на каком языке / компиляторе они были созданы. (Так, например, используйте PChars, а не строки. Как правило, не передавайте классы Delphi, такие как TStream, для DLL. В некоторых случаях это работает, но в целом небезопасно, потому что, даже если DLL была скомпилирована в Delphi, возможно, это была другая версия компилятора с немного отличным представлением о том, что такое TStream). Google для использования DLL в Delphi, и вы найдете еще много советов.
Еще один способ, который еще не был упомянут, - включить скрипты в самом приложении. Существует несколько очень мощных сторонних скриптовых движков, как коммерческих, так и бесплатных, и большинство из них позволяют вам обмениваться объектами Delphi со скриптом. Некоторые из этих библиотек поддерживают только Pascal в качестве языка сценариев, другие позволят вам использовать Basic (возможно, лучше для начинающих пользователей) или другие языки. См., Например, сценарий RemObjects Pascal (бесплатно) по адресу http://www.remobjects.com/free.aspx.
На данный момент моим любимым скриптовым решением является Python для Delphi (P4D, также бесплатный) с http://mmm -experts.com / Products.aspx? ProductID = 3 . Он может прекрасно взаимодействовать с вашими классами посредством RTTI и позволяет выполнять код Python в вашем приложении Delphi, а также использовать классы Delphi в скриптах Python. Учитывая популярность Python, это может быть жизнеспособным решением, если вы хотите привлечь разработчиков к своему проекту. Однако для каждого пользователя должен быть установлен дистрибутив Python.
Мне кажется, что барьер для входа, с точки зрения потенциальных авторов плагинов, ниже, если вы используете сценарии, чем если вы выбираете библиотеки DLL.
Теперь вернемся к моему первоначальному вопросу: все становится намного сложнее, если вам нужны плагины для взаимодействия с вашим пользовательским интерфейсом, например, поместив элементы управления на него. Как правило, библиотеки DLL не могут быть использованы для этого. Санкционированный Borland / CodeGear способ заключается в использовании пакетов (BPL). С BPL вы можете получить доступ и создать экземпляры классов, предлагаемых плагином, как если бы они были объявлены в вашем хост-приложении. Суть в том, что все BPL должны быть скомпилированы с одной и той же версией и сборкой Delphi, что и ваше основное приложение. По моему мнению, это делает пакеты совершенно непрактичными, поскольку трудно ожидать, что все потенциальные авторы плагинов по всему миру будут использовать ту же версию Delphi, что и вы. Большая ловушка.
Чтобы обойти это, я экспериментировал с другим подходом: продолжайте использовать библиотеки DLL и разрабатывайте синтаксис для плагина для описания нужного ему пользовательского интерфейса, а затем создайте его самостоятельно в хост-приложении. (XML является удобным способом выражения пользовательского интерфейса, поскольку вы получаете концепцию родительского / вложенного доступа бесплатно.) Синтаксис описания пользовательского интерфейса может включать в себя обратные вызовы библиотеки DLL, запускаемые при изменении содержимого или состояния элемента управления. Этот метод ограничит плагины набором элементов управления VCL, которые ваше приложение уже использует или зарегистрировало. И это не работа на одну ночь, в то время как BPL, безусловно, есть.
Гугл тоже для "Delphi plugin framework". Есть несколько готовых решений, но, насколько я знаю, они обычно используют BPL, с их ограниченной полезностью.