& Lt; неявно импортируется & # 8221; всегда плохо в пакетах Delphi?

StackOverflow https://stackoverflow.com/questions/1215664

Вопрос

Пытаясь переставить мои пакеты для набора компонентов TFrame-descendent , я нахожу это казалось бы, необходимо выделить некоторые из моих служебных потомков TFrame отдельно от диалоговых форм, которые их используют, главным образом потому, что первые зарегистрированы в палитре как истинные компоненты, и это, кажется, иногда путает IDE в отношении диалоговых форм, которые их используют. Диалоговые формы в свою очередь вызываются невизуальными компонентами, которые являются частью третьего пакета. Это, пока , кажется, делает большую часть

Это было полезно?

Решение

Вот проблема:

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

Код каждого компилируемого модуля должен быть в пакете. Компилятор запустится со всеми модулями, которые вы объявите в разделе contains , но любые другие модули, используемые этими модулями, также должны быть скомпилированы, чтобы они были доступны, если эти блоки не содержатся в другом пакете. который указан в разделе требуется . Эти дополнения являются «неявно импортированными». единицы. Проблема в том, что они импортированы неявно , явно не указано в разделе содержит , где они будут удобно отображаться в менеджере проектов справа. Это означает, что вы можете не заметить, что ваше устройство находится в пакете, и в конечном итоге положить его в другой. Затем, когда вы пытаетесь запустить вашу программу и загрузить пакеты, все обрывается. Вот почему компилятор предупреждает вас об этом.

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

Другие советы

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

Я считаю, что наилучшим способом на данный момент является наличие папки для пакета, и эта папка содержит все файлы для пакета. Если я вижу " неявный импорт " предупреждение, я либо добавляю требуемый пакет, либо добавляю единицу в пакет. Таким образом, все единицы указаны в пакете, который их содержит, и все они находятся в одной папке. Я никогда не добавляю папки в Путь поиска, потому что каждый проект знает обо всех своих файлах напрямую.

Структура на самом деле не так уж и сложна в обслуживании, и она защищает вас от проблем, когда разные модули содержат разные версии файла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top