Каковы различия между экспертом bpl delphi и экспертом dll delphi - PullRequest
4 голосов
/ 19 мая 2011

Я работаю в 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 ]

5 голосов
/ 19 мая 2011

Должен ли я скомпилировать мой мастер в виде библиотеки DLL или пакета? Пакеты легче загружать и выгружать без перезапуска IDE (и, следовательно, легче отлаживать), но они могут создавать конфликты имен единицв IDE.Конфликты случаются, когда имя модуля мастера совпадает с именем модуля в другом загруженном пакете времени разработки.В этом случае оба пакета не могут быть загружены одновременно.Рекомендуемый обходной путь - префикс всех имен ваших устройств с «уникальным» префиксом.GExperts, например, использует "GX_" в качестве префикса имени для своих единиц.

С это очень хороший источник об OTA: GExperts

1 голос
/ 19 мая 2011

Когда вы обращаетесь к глобальной переменной, это будут глобальные переменные, которые являются глобальными для вашей DLL, а не глобальными для основного BDS.exe. Я не уверен, но я думаю, что ваша DLL будет иметь собственную глобальную переменную Screen и Application, если вы связаны в Forms, и ядро ​​VCL.

Доступ к тем вещам, которые принадлежат самой IDE, осуществляется через Open Tools Api (OTA). Я считаю, что вы обычно не делите какие-либо объекты между IDE вашего эксперта, и если бы вы попытались это сделать, это было бы проблематично. Все, что вы делаете в обход OTA, будет уязвимым для взлома странным образом, особенно в будущих версиях IDE.

Проблемы с зависимостями - это, конечно, серьезная причина не использовать пакеты, основанные на BPL, но я думаю, что еще большей причиной является полное разделение внутренних компонентов вашего инструмента и внутренних компонентов IDE.

Помните, что цель DLL, как и исполняемая цель, статически связана. В этом суть разницы. Если ваш эксперт предоставляет функциональность, которая использует только легальные общедоступные документированные интерфейсы OTA, то переход на DLL должен быть беспроблемным. Если вы используете взломы задних дверей, которые возможны с BPL, то я не могу посоветовать вам дальше.

...