2010-07-31 4 views
1

저는 Delphi 2009를 사용하고 있습니다. 제 프로그램이 컴파일되어 정상적으로 실행되고 있습니다. Action 목록을 사용하고 프로그램을 내 프로그램에 포함시킵니다. 비록 잠시 후에 변경하지는 않았지만.델파이에서 액션을 추가하면 치명적 오류가 발생합니다

그래서 오늘은 ActionList에 새로운 액션이 추가되었다고 가정합니다. 다른 것을하지 않고서는 이제 프로그램을 만들고 실행하면 다음과 같은 오류가 발생합니다.

[DCC 치명적인 오류] Userface.pas (1) : F2092 프로그램 또는 장치 'Userface'가 재귀 적으로 자체를 사용합니다.

나는 uses 절을 변경하지 않았습니다. Userface 유닛이 자신을 호출하거나 Userface를 호출하는 다른 유닛을 호출하는 인스턴스를 찾을 수 없습니다. 구현 섹션에 잠재적으로 재귀 호출을 배치해야합니다.

저장하지 않고 Delphi를 종료하고 다시 빌드하고 실행하면 정상적으로 실행됩니다. 작업 목록에 새 작업을 다시 추가하려고하면 치명적인 오류가 다시 발생합니다.

나는 무슨 일이 일어나고 있는지를 알아 내지 못하고있다. 이 문제를 해결하는 방법을 알아내는 데 도움이 될만한 것에 감사드립니다.


편집 : Uwe의 답변을받은 후, 나는 그것이 여전히 일어나고 있는지 확인하기 위해 두 번 체크했다. 과연 내가 Uwe에게 보내는 나의 말에서 묘사했던대로 나는 그것을 다시했다. 건물을 짓은 후에 다시 일어났습니다.

...하지만 프로젝트 메뉴에서 실수로 "빌드"를 선택하지 않고 대신 "컴파일"을 선택했습니다. 그것은 잘 컴파일됩니다. 그런 다음 건물을 만들려고했지만 이제는 제대로 작동합니다. 치명적인 오류가 아닙니다! 다 잘된 것 같아.

다른 작업을 추가하고 빌드하려고하면 오류가 다시 발생합니다. 하지만 컴파일하면 성공적으로 빌드 할 수 있습니다. 적어도 해결 방법이 있습니다.

이것은 일종의 결함 일 것입니다. 나는 무슨 일이 일어 났는지 모른다. 아무도 이것이 무엇인지 또는 그것이 일어날 수있는 이유를 알고 있습니까?


후속. Marjan이 말한 것처럼, 다른 상황에서 발생할 수 있으며, 그 중 하나가 나에게 일어났습니다. 그래서 그것은 아마도 내 질문에 묻는 행동 추가에 직접 관련이 없습니다.

나에게는 적지 만 지금까지는 비교적 드문 일이며 사소한 성가심으로 변했습니다. Delphi 2010에서 이미 수정되었을 수 있습니다. 궁극적 인 해결책은 64 비트 또는 다중 플랫폼을 추가 한 다음 Delphi 2011 또는 12로 업그레이드 할 때입니다.

+1

왜 그런 일이 벌어 질지 모르지만 그 위로가 있다면 다른 상황에서도 일어난다는 것을 알았습니다. 변경 직후에 빌드가 실패하면 컴파일되고 빌드가 성공합니다. 이러한 상황에서 때때로 도움이되는 것은 컴파일/빌드 전에 모두 명시 적 저장입니다. IDE에서 타이밍 및 캐싱과 관련이있을 것 같습니다. 아마도 코드 통찰력, 오류 레드 라이닝 (error red lining) 등을 가능하게하는 컴파일 스레드가 관련되어있을 수 있습니다. –

+0

@ Marjan :이 의견은 나에게 매우 도움이된다. 그것을 답으로 추가하고 다른 사람들이 직접 그것에 의견을 남길 수있게하십시오. 그러면 더 나은 답변이 없을 경우 답변에 대한 크레딧을 줄 수 있습니다. – lkessler

+0

감사합니다. 완료되었습니다. –

답변

1

요청에 따라 답변으로 내 의견.

왜 그런 일이 벌어 질 지 모르지만 그 위로가 있다면 다른 상황에서도 일어난다는 것을 알았습니다. 변경 직후에 빌드가 실패하면 컴파일되고 빌드가 성공합니다.

이러한 상황에서 때때로 도움이되는 것은 컴파일/빌드 전에 모두 명시 적 저장입니다.

IDE에서 타이밍 및 캐싱과 관련이있을 것 같습니다. 아마도 코드 통찰력, 오류 레드 라이닝 (error red lining) 등을 가능하게하는 컴파일 스레드가 관련되어있을 수 있습니다.

+0

방금 ​​다른 상황에서도 발생했습니다. 정확히 무슨 일이 일어나고 있는지 모르겠지만 "컴파일"솔루션과 "모두 저장"솔루션 간에는 비교적 드물게 사소한 성가심으로 변하고 있습니다. – lkessler

2

때때로 구성 요소를 추가하면 uses 절이 자동으로 변경됩니다. 이는 Delphi 자체 또는 ModelMaker CodeExplorer와 같은 제 3 자 플러그인에 의해 수행 될 수 있습니다. 기록 탭을 사용하여 변경 사항을 빠르게 확인할 수 있습니다.

소스가 없으면 더 말할 수 있습니다.

편집 : 계정으로 추가 정보를 촬영 나는 순환의 검색 경로

어딘가에서 같은 이름을 가진

  1. 순환 종속성을
  2. 단위 프로젝트를 확인하는 것이 좋습니다 당신은 ModelMakerTools에서 무료 Unit Dependency Analyzer을 사용할 수 있습니다. 해당 페이지 하단에서 다운로드 링크를 찾을 수 있습니다.

+0

아이디어를 주셔서 감사합니다. @Uwe,하지만 구성 요소를 추가하지 않겠습니다. 이미 내 양식에있는 ActionList 구성 요소를 두 번 클릭하고 있습니다. 그런 다음 '보기'카테고리를 클릭합니다. 그런 다음 "새 작업"아이콘을 클릭하여 "동작 1"을 작업 목록에 추가합니다. 나는 ActionList를 닫는다. 보라, 치명적인 오류 메시지 목록입니다. 그리고 나서 ... (제 질문 편집) :-) – lkessler

+0

실제로 TComponent 자손 인 TAction을 추가하고 있습니다. 내 제안이 그렇게 뒤떨어져 있지 않은지 확인하려면 TFileOpen과 같은 표준 작업을 추가하십시오. 여기에는 uses 절에 StdActns가 포함됩니다. –

2

올바른 소스 (.dpr 경로!)를 컴파일하고 사용하는 부분이 동일하면 매우 간단하거나 사용하지 않으면 델파이가 상호 참조를 제거 할 수 있습니다.

어쩌면 컴파일러는 A와 B가 서로를 가져 오지만 한 쪽이 다른 쪽의 기호를 사용하지 않으면 컴파일러가 통과하도록 허용 할 수 있습니다. 액션을 선택하여 이전에 작동하지 않는 코드가 도달 할 수 있기 때문에 기호를 사용하자 마자 상호 참조 충돌로 바뀝니다.

+0

글쎄, 지난 몇 주 동안 내 프로그램에 바쁘게 일해 왔고 잘 지내고있다. 이 문제를 겪은 작업을 추가하려는 시도를했을 때만이었습니다. – lkessler

+0

조치가 활성화되는 모든 코드를 주석 처리하고 변경 사항이 적용되는지 확인하십시오. 어쨌든 변경 사항을 찾을 때 죽음 코드 제거에 대해 잊지 마십시오. –

+0

코드를 구현하지 않았습니다. 방금 작업을 추가했습니다. 전에 "죽음의 코드"에 대해 들어 본 적이 없어. 무서운데. – lkessler

관련 문제