여러 프로젝트에 초기화 섹션이있는 프로젝트가 있습니다. 이 블록이 실행되는 순서를 제어하고 싶습니다.단위 초기화 순서가 소스에 나와 있지 않습니다.
다음에 따르면 question은 단위가 컴파일 된 순서에 기반하므로 궁극적으로 순서는 원본 DPR의 uses 절에있는 단위의 배열을 기반으로해야합니다.
program X;
uses
Vcl.Forms,
uMain in 'uMain.pas' {MainForm},
uFooA in 'uFooA.pas',
uFooB in 'uFooB.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
내 문제는이 단순히 초기화 블록이 실행되는 순서되지 않는 것입니다 :
다음은 내 프로젝트의 조선 민주주의 인민 공화국 원이다.
How it should be | How it actually is
|
1. uMain | 1.uFooA
2. uFooA | 2.uFooB
3. uFooB | 3.uMain
나는 SSCCE를 제공하고 싶지만 단순히 새로운 프로젝트에서이 문제를 재현 할 수는 없습니다.
나는 프로젝트를 성공 리에 재구성하려고 노력했다.
무엇이 누락 되었습니까?
uMain은 uFooA 및/또는 uFooB를 사용합니까? 이 경우 사용 된 단위가 먼저 컴파일됩니다. –
@UweRaabe, 아, 네, 바보 같아요 ... 받아 들일 수 있도록 답을 게시 해주세요. – Peter
여기에 답변이 필요할지 모르겠습니다. 컴파일러는 DPR의 uses 절의 맨 위에서 시작하여 아래로 내려갑니다. 발견 한 각 단위에 대해 반복적으로 같은 작업을 수행합니다. 시작 부분에서 시작합니다. uses 절을 사용하여 이미 컴파일되지 않은 사용 된 각 유닛을 컴파일하고 현재 유닛을 컴파일하십시오. 그래서 다른 것들이 컴파일되기 전에 유닛을 가져올 수 있다면 먼저 초기화 될 것입니다. * –