Каковы различия между экспертом bpl delphi и экспертом dll delphi
Я работаю в Delphi IDE expert, теперь, чтобы избежать проблем с зависимостями, я думал о том, чтобы перестроить этого эксперта в качестве dll-эксперта, как было предложено в одном из этих ответов, теперь мой эксперт (скомпилированный как bpl) имеет доступ к Screen
а также Application
глобальные переменные (экземпляры Delphi IDE), поэтому мне было интересно, смогу ли я скомпилировать своего эксперта как dll, могу ли я по-прежнему обращаться к этим переменным, а также хочу знать, which are the main differences between a bpl delphi expert and a dll delphi expert?
2 ответа
Должен ли я скомпилировать мой мастер как DLL или пакет? Пакеты легче загружать и выгружать без перезапуска IDE (и, следовательно, их легче отлаживать), но они могут создавать конфликты именования единиц в IDE. Конфликты случаются, когда имя модуля мастера совпадает с именем модуля в другом загруженном пакете времени разработки. В этом случае оба пакета не могут быть загружены одновременно. Рекомендуемый обходной путь - префикс всех имен ваших устройств с "уникальным" префиксом. GExperts, например, использует "GX_" в качестве префикса имени для своих единиц.
Из этого очень хорошего источника об OTA: GExperts
Когда вы обращаетесь к глобальной переменной, это будут глобальные переменные, которые являются глобальными для вашей DLL, а не глобальными для основного BDS.exe. Я не уверен, но я думаю, что ваша DLL будет иметь собственную глобальную переменную Screen и Application, если вы связаны в Forms, и ядро VCL.
Те вещи, которые принадлежат самой IDE, доступны через Open Tools Api (OTA). Я считаю, что вы обычно не делите какие-либо объекты между IDE вашего эксперта, и если бы вы попытались это сделать, это было бы проблематично. Все, что вы делаете в обход OTA, может стать уязвимым для взлома странным образом, особенно в будущих версиях IDE.
Проблемы с зависимостями - это, конечно, серьезная причина не использовать пакеты, основанные на BPL, но я думаю, что еще большей причиной является полное разделение внутренних компонентов вашего инструмента и внутренних компонентов IDE.
Помните, что цель DLL, как и исполняемая цель, статически связана. В этом суть разницы. Если ваш эксперт предоставляет функциональность, которая использует только легальные общедоступные документированные интерфейсы OTA, то переход на DLL должен быть без проблем. Если вы используете взломы задних дверей, которые возможны с BPL, то я не могу посоветовать вам дальше.