Пакет содержит компонент, который не принадлежит ему. - PullRequest
1 голос
/ 29 июля 2011

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

Что вызывает регистрацию в пакете компонента, не указанного в разделе contains?

Delphi 2007

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Что является причиной того, что компонент, не указанный в разделе содержимого, регистрируется в пакете?

Наличие процедуры Register, которая вызывает RegisterComponents .

Две возможности:

  1. Ваш пакет использует модуль, который регистрирует свои компоненты по стандартной процедуре Register.Это устройство не является частью какого-либо другого пакета, поэтому оно регистрируется вместе с вашим пакетом.В этом случае вы должны получить предупреждение о неявно используемом устройстве.

  2. Ваш пакет прямо или косвенно зависит от пакета, который содержит компоненты.Этот пакет еще не установлен, поэтому он устанавливается вместе с вашим пакетом.Когда пакет загружается в IDE, все модули рекурсивно перечисляются, и каждая найденная Register процедура вызывается IDE.Устанавливая пакет, вы также эффективно устанавливаете все пакеты дизайна, от которых он зависит.

0 голосов
/ 29 июля 2011

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

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

Пример: ваш блок - это блок A. Он использует блок B. Блок A находится в вашем списке, а блок B - нет. Пакет P уже содержит блок B. Если вы не добавите пакет P в свой список требований, блок B также будет включен в ваш пакет, даже если его нет в списке содержимого, поскольку ваш пакет (ваш блок A) нуждается в том, чтобы блок для функционирования. Если вы включите пакет P в свой список требований (ветвь «ссылки» в менеджере проектов), будет использован блок B в пакете P, и дублирование не будет.

...