Почему добавление Action приводит к фатальной ошибке в Delphi - PullRequest
1 голос
/ 01 августа 2010

Я использую Delphi 2009. Моя программа компилируется и работает нормально.Я использую списки действий и встроил их в свою программу - хотя я давно их не менял.

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

[DCC Fatal Error] Userface.pas (1): F2092 Программа или модуль 'Userface' рекурсивно использует себя.

Я ничего не сделал, чтобы изменить какие-либо условия использования.Я не могу найти ни одного экземпляра моего модуля Userface, вызывающего себя или вызывающего другой модуль, который вызывает Userface.Я размещаю потенциально рекурсивные вызовы в разделе «Реализация», как и должно быть.

Если я выйду из Delphi без сохранения, перестройки и запуска, он работает нормально.Если я снова попытаюсь добавить новое действие в список действий, снова произойдет фатальная ошибка.

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


Редактировать: После ответа Уве, я дважды проверил, чтобы убедиться, что это все еще происходит.Конечно же, я сделал это снова, как я описал в своем комментарии к Уве.После постройки это случилось снова.

... Но потом, случайно в меню «Проект», я пропустил выбор «Сборка» и выбрал «Компиляция».Скомпилировано нормально.Тогда я попытался построить, и теперь сборка работает правильно.Нет фатальной ошибки!Мне все снова кажется нормальным.

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

Это должно быть своего рода сбой.Я не знаю, что случилось.Кто-нибудь знает, что это такое или почему это может происходить?


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

Тем не менее, для меня это относительно редкое событие, которое превратилось в незначительное раздражение.Возможно, это уже было исправлено в Delphi 2010, и мое окончательное решение будет при следующем обновлении до Delphi 2011 или 12 после добавления 64-разрядной или многоплатформенной версии.

Ответы [ 3 ]

2 голосов
/ 01 августа 2010

Если вы абсолютно уверены, что скомпилировали правильный источник (пути .dpr!), А используемые части одинаковы, возможно, Delphi может исключить взаимные ссылки, если они очень простые или не используются.

IOWможет быть, компилятор пропустит это, если A и B импортируют друг друга, но один из них не использует символы другого.Как только вы начинаете использовать символы (поскольку ранее недоступный код становится доступным при выборе действия), это превращается в конфликт взаимных ссылок.

2 голосов
/ 01 августа 2010

Иногда добавление компонента автоматически меняет предложение использования.Это может быть сделано либо самим Delphi, либо сторонним плагином, таким как ModelMaker CodeExplorer.Вы можете использовать вкладку истории, чтобы быстро идентифицировать любые изменения.

Без источника больше ничего не могу сказать, что я могу ...

РЕДАКТИРОВАТЬ: Принятие во внимание вашу дополнительную информацию IПредлагаем проверить проект на наличие

  1. циклических зависимостей
  2. единиц с тем же именем где-нибудь в пути поиска

Для циклических зависимостей вы можете использовать Анализатор зависимостей единиц от ModelMakerTools.Вы можете найти ссылку для скачивания внизу этой страницы.

1 голос
/ 01 августа 2010

В соответствии с моим комментарием в качестве ответа.

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

В этих ситуациях иногда также помогает явное сохранение всех перед компиляцией / сборкой.

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

...