Сторонние зависимости в эксперте Delphi

Я пишу эксперт Delphi Ide, с некоторыми сторонними зависимостями (визуальные элементы управления), мой вопрос, когда этот эксперт будет установлен на целевой машине, этот компьютер будет требовать, чтобы также были установлены эти сторонние компоненты? или компоненты встроены в сгенерированный bpl?

3 ответа

Решение

Об экспертах BPL:

Если вы можете не связываться с версиями сторонних элементов управления, разработанными во время разработки, придерживайтесь только BPL времени выполнения, вы можете легально отправлять их вместе со своим экспертом в качестве эксперта.

К сожалению, я не могу сказать, что вы можете безопасно отправить их, потому что вы имеете дело с другими разработчиками Delphi: они могут иметь те же сторонние пакеты, но в другой версии! С помощью обычного приложения вы можете просто установить свою версию BPL в каталог своего приложения, но это не сработает для Delphi IDE, потому что приложение - это IDE: IDE - это то, что загружает и связывает BPL, и может не загружать две версии одного и того же BPL. И вы не можете заменить версию своего пользователя, потому что им нужно сохранить версию, которую они лицензировали, даже если ваша версия новее!

Решение: эксперты DLL:

Одним из возможных решений является компиляция вашего эксперта в виде DLL, а не в виде пакета, и статическое связывание всех зависимостей. Таким образом, вы больше не зависите от версии вашего пользовательского элемента управления.

Они будут зависеть от любых пакетов, которые вы помещаете в пункт "Требует" вашего пакета. Тогда любые пакеты, которые они требуют, и так далее...

Они могут быть встроены, если вы поместите модули, от которых вы зависите, в ваш пакет.

Пример:

package Package1;

...

// Items in the section mean that your package
// will depend on the BPL of the other package
// Target machine must have the BPL's listed here.
requires
  rtl;  


// Unit's here mean that the code is in your
// package and not in another BPL
contains
  Unit8 in 'Unit8.pas';

end.

Слово предостережения

  • Загружены два пакета, содержащие блоки с одинаковым именем.
  • Лицензирование сторонних компонентов, так как коммерческие библиотеки обычно не могут быть переупакованы в виде библиотеки.
  • Разработчики могут также захотеть использовать другую версию стороннего компонента. Вам нужно будет предоставить источник этих разработчиков, чтобы они могли связать вашего эксперта.

Один из способов избежать проблем

  • Переименуйте сторонние юниты, которые используются.
  • Включите переименованные единицы в ваш пакет.

Я видел этот метод много раз.

Например, Castalia делает это и рекомендует этот метод при использовании его с открытым исходным кодом Delphi Lexer и парсер.

Как говорил Роберт Лав: зависимости существуют,

Любой проект delphi можно настроить для компиляции с пакетами или без них. Проект | Варианты | Пакеты | установите или снимите флажок "Сборка с помощью пакетов времени выполнения".

Когда вы собираете / компилируете с помощью пакетов, это означает, что вы не встраиваете код из пакетов, и вам придется распространять bpl, от которых зависит ваш эксперт. Как Роберт также говорил: пожалуйста, обратите внимание на лицензии в отношении перераспределения, когда вы выбираете эту опцию.

Когда вы собираете / компилируете без пакетов, код сторонних элементов управления / библиотек внедряется в ваш исполняемый файл / dll, и это все, что вам нужно распространять.

Другие вопросы по тегам