나중에 다양한 작업을 수행하기 위해 다양한 형태의 애플리케이션 포인터를 유지해야하는 Delphi 유닛이 있습니다.Delphi : 순환 참조를 피하기 위해 변수 선언하기
이러한 작업을 수행하려면 포인터를 양식 유형 (ex.
var
ptrFrmMain: Pointer;
CurrentFrmMain: TfrmMain;
begin
CurrentFrmMain := ptrFrmMain;
CurrentFrmMain.Close();
end;
문제는이 장치가 애플리케이션의 모든 다른 델파이 유닛의 용도에 포함된다는 것이다. 그래서 간단하게 Pointer
을 인터페이스 섹션에 선언 할 수는 있지만 다른 유닛 (예 : frmMain.pas
의 TfrmMain
)에 선언 된 타입을 선언 할 수는 없습니다.
나는 같은 구현 섹션에서 사용을 배치하여이 문제를 해결할 수 :
interface
type TMyThread = class(TThread)
Public
ptrFrmMain:Pointer
...
implementation
uses frmMain
var
CurrentFrmMain: TfrmMain;
하지만 문제는 여전히 존재 : 나는 멀티 스레드 목적을 위해, 내 클래스 인스턴스에 구체적으로 변수를 필요 일반 전역 변수가 아닙니다. TfrmMain
은 선언되지 않았으므로 인터페이스 섹션을 사용할 수 없으므로 TmyThread
클래스에 배치 할 수 없습니다.
솔루션을 사용하는 모든 절차에서 로컬 변수로 CurrentFrmMain
을 배치 한 다음 매번 CurrentFrmMain := ptrFrmMain
변환을 수행하지만 더 좋은 해결책을 알고 계십니까?
대단히 감사합니다.
포인터를 내부 변환 할 수 있습니다 또는 일반 기본 TForm로 선언 할 수 있습니다 ... –
@FreeConsulting 내 폼의 특정있는 함수를 호출해야하기 때문에 일반 기본 Tform으로 선언 할 수 없습니다. 'CurrentFrmMain.MyFunction()' – Flavio
@FreeConsulting 또한 포인터를 내부에 캐스팅하는 것은 위에서 언급 한 해결책 이었지만 각 함수에서 다시 초기화하지 않는 것이 좋습니다. – Flavio