제어 및 제어 컨테이너 지침 개요
ActiveX 컨트롤은 기본적으로 IUnknown 인터페이스를 지원하는 간단한 OLE 개체입니다. 일반적으로 기능을 제공하기 위해 더 많은 인터페이스를 지원하지만 모든 추가 인터페이스는 선택 사항으로 간주될 수 있으므로 컨트롤 컨테이너는 지원되는 추가 인터페이스를 사용하지 않아야 합니다. 컨트롤이 지원해야 하는 추가 인터페이스를 지정하지 않으면 컨트롤이 컨트롤로 한정되도록 특정 인터페이스를 지원하지 않고도 특정 기능 영역을 효율적으로 대상으로 지정할 수 있습니다. OLE와 마찬가지로 컨트롤이든 컨트롤 컨테이너이든 관계없이 인터페이스를 사용할 수 있고 표준 반환 검사 규칙을 항상 따라야 한다고 가정해서는 안 됩니다. 필요한 인터페이스를 사용할 수 없는 경우 컨트롤 또는 컨트롤 컨테이너가 정상적으로 저하되고 대체 기능을 제공하는 것이 중요합니다.
ActiveX 컨트롤 컨테이너는 최소 ActiveX 컨트롤을 호스트할 수 있어야 합니다. 또한 컨테이너에 지정된 대로 다양한 추가 인터페이스를 지원 합니다. 컨테이너가 선택적으로 지원할 수 있는 여러 인터페이스 및 메서드가 있으며, 구성 요소 범주라고 하는 기능 영역으로 그룹화됩니다. 컨테이너는 구성 요소 범주의 조합을 지원할 수 있습니다. 예를 들어 데이터 바인딩에 대한 구성 요소 범주가 있고 컨테이너는 컨테이너의 시장 요구 사항에 따라 데이터 바인딩 기능을 지원하거나 지원하지 않을 수 있습니다. 컨트롤이 작동하기 위해 컨테이너의 데이터 바인딩 지원이 필요한 경우 레지스트리에 이 요구 사항이 입력됩니다. 이렇게 하면 컨트롤 컨테이너가 성공적으로 호스트할 수 있다는 것을 알고 있는 컨트롤만 삽입할 수 있습니다. 구성 요소 범주는 OLE의 일부로 지정되며 ActiveX 컨트롤에만 해당되지 않으며 컨트롤 아키텍처는 구성 요소 범주를 사용하여 OLE 구성 요소가 지원할 수 있는 기능 영역을 식별합니다. 구성 요소 범주는 누적되거나 배타적이지 않으므로 컨트롤 컨테이너는 반드시 다른 범주를 지원하지 않고 한 범주를 지원할 수 있습니다.
선택적 기능이 필요한 컨트롤 또는 특정 컨테이너와 관련된 기능을 이러한 요구 사항으로 명확하게 패키지하고 판매해야 합니다. 마찬가지로 특정 기능 또는 구성 요소 범주를 제공하는 컨테이너는 ActiveX 컨트롤을 호스팅할 때 이러한 수준의 지원을 제공하는 것으로 판매 및 패키지되어야 합니다. 컨트롤은 가능한 한 많은 컨테이너를 대상으로 지정하고 테스트하고, 인터페이스 또는 메서드를 사용할 수 없는 경우 더 적거나 다른 기능을 제공하기 위해 정상적으로 저하하는 것이 좋습니다. 구성 요소 범주를 지원하지 않고 컨트롤이 지정된 작업 함수를 수행할 수 없는 경우 컨트롤이 부적절한 컨테이너에 삽입되지 않도록 레지스트리에서 해당 범주를 요구 사항으로 입력해야 합니다.
이러한 지침은 컨트롤이 컨트롤 컨테이너를 지원할 것으로 예상할 수 있는 인터페이스 및 메서드를 정의하지만, QueryInterface 또는 다른 메서드를 사용하여 이러한 인터페이스에 대한 포인터를 가져올 때 항상 컨트롤이 반환 값을 검사 합니다. 컨테이너는 컨트롤이 IUnknown 인터페이스보다 더 많은 것을 지원할 것으로 예상해서는 안 되며, 이러한 지침은 컨트롤이 지원할 수 있는 인터페이스와 특정 인터페이스의 존재가 의미하는 바를 식별합니다.
ActiveX 컨트롤 및 컨트롤 컨테이너 지침이 중요한 이유
ActiveX 컨트롤은 소프트웨어 개발 도구에서 최종 사용자 생산성 도구에 이르기까지 다양한 컨테이너에서 사용할 프로그래밍 가능한 소프트웨어 구성 요소를 개발하기 위한 기본 아키텍처가 되었습니다. 컨트롤이 다양한 컨테이너에서 잘 작동하려면 컨트롤이 모든 컨테이너에서 사용할 수 있는 최소 수준의 기능을 가정할 수 있어야 합니다.
이러한 지침에 따라 제어 및 컨테이너 개발자는 컨트롤과 컨테이너를 보다 안정적이고 상호 운용 가능하며 궁극적으로 구성 요소 기반 솔루션을 빌드하기 위한 더 나은 사용 가능한 구성 요소를 만듭니다.
필요한 인터페이스를 사용할 수 없는 경우 수행할 일
OLE 프로그램은 QueryInterface를 사용하여 인터페이스 포인터를 획득해야 하며 반환 값을 검사 합니다. OLE 애플리케이션은 QueryInterface 가 성공한다고 안전하게 가정할 수 없습니다.
이 요구 사항은 모든 OLE 애플리케이션에 적용됩니다. 요청된 인터페이스를 사용할 수 없는 경우(즉, QueryInterface 가 E_NOINTERFACE 반환) 컨트롤 또는 컨테이너는 지정된 작업 함수를 수행할 수 없는 경우에도 정상적으로 저하되어야 합니다.
관련 항목