변형과 인터페이스
변형과 인터페이스 (Variants and interfaces)
Remark: variant에 대한 Dispatch 인터페이스 지원은 현재 컴파일러에서 깨져 있어요.
variant는 인터페이스에 대한 참조를 담을 수 있어요. 일반 인터페이스(IInterface에서 파생)이거나 dispatch 인터페이스(IDispatch에서 파생)일 수 있죠. dispatch 인터페이스 참조를 담은 variant는 그 뒤의 객체를 제어하는 데 쓰일 수 있어요. 컴파일러는 그 dispatch 인터페이스에 대한 호출을 수행하기 위해 늦은 바인딩(late binding)을 사용해요. 함수 이름과 파라미터, 인자에 대한 런타임 검사는 없어요. 결과 타입도 검사되지 않아요. 컴파일러는 dispatch 호출을 만들고 결과를 가져오는 코드를 그냥 삽입할 뿐이죠.
본문
이것은 기본적으로 Windows에서 다음과 같은 일을 할 수 있다는 뜻이에요.
Var
W : Variant;
V : String;
begin
W:=CreateOleObject('Word.Application');
V:=W.Application.Version;
Writeln('Installed version of MS Word is : ',V);
end;
이 줄은
V:=W.Application.Version;
variant W에 저장된 dispatch 인터페이스를 조회하고, 필요한 dispatch 정보가 발견되면 그 호출을 실행하는 코드를 삽입해서 실행돼요.
더 알아보기
variant의 dispatch 인터페이스는 늦은 바인딩으로 동작해요. OLE 자동화 객체(예: Office 애플리케이션)를 제어할 때 편리하지만, 컴파일 타임 타입 검사가 없다는 한계가 있어요.