인터페이스에 대한 지원의 의미

IUnknown 인터페이스 외에도 해당 문제에 대한 ActiveX 컨트롤 또는 COM 개체는 추가 인터페이스를 통해 지원하는 선택적 기능을 표현합니다. 즉 , IUnknown보다 다른 인터페이스가 필요하지 않습니다. 이를 위해 다음 표에는 ActiveX 컨트롤이 지원할 수 있는 인터페이스와 해당 인터페이스를 지원하는 것이 무엇을 의미하는지 나열되어 있습니다.

인터페이스 주석/인터페이스를 지원하는 의미
IOleObject
컨트롤에 이벤트 이외의 다른 항목에 대해 클라이언트 사이트와의 통신이 필요한 경우( IConnectionPointContainer 참조) IOleObject 가 필요합니다. 이 인터페이스를 구현할 때 컨트롤은 SetHostNames, Close, EnumVerbs, Update, IsUpToDate, GetUserClassID, GetUserType, GetMiscStatus 및 컨테이너의 IAdviseSink 구현과 함께 작동하는 Advise, UnadviseEnumAdvise 메서드의 의미 체계도 지원해야 합니다. IOleObject를 구현하는 컨트롤은 컨테이너가 제공하는 경우 IAdviseSink를 처리할 수 있어야 합니다. 컨테이너는 이 경우 컨트롤이 존재하지 않는 싱크를 호출하지 않도록 보장하지 않을 수 있습니다.
IOleInPlaceObject
현재 위치에서 활성화되고 UI가 활성화될 수 있는 컨트롤의 기능을 표현합니다. 이 인터페이스는 컨트롤에 활성화할 수 있는 일종의 사용자 인터페이스가 있으며 IOleInPlaceActiveObject 도 지원됨을 의미합니다. 필요한 메서드는 GetWindow, InPlaceDeactivate, UIDeactivate, SetObjectRectsReactivateAndUndo입니다. 이 인터페이스를 지원하려면 IOleObject를 지원해야 합니다.
IOleInPlaceActiveObject
IOleInPlaceObject를 지원하는 현재 위치 지원 개체도 이 인터페이스를 제공해야 하지만 컨트롤 자체가 인터페이스를 직접 구현할 필요는 없습니다.
IOleControl
(a) 니모닉(GetControlInfo, OnMnemonic 메서드), (b) 앰비언트 속성(OnAmbientPropertyChange) 및/또는 (c) 이벤트를 처리하려는 컨트롤의 능력과 욕구를 표현합니다. 니모닉은 IOleInPlaceActiveObject를 통해 처리되는 가속기와 다릅니다. 니모닉은 연결된 UI를 가지며 컨트롤이 UI가 활성화되지 않은 경우에도 활성화됩니다. 니모닉에 대한 컨트롤의 지원은 컨트롤이 컨테이너의 IOleControlSite::OnControlInfoChanged 메서드를 사용하는 방법도 알고 있음을 의미합니다. 이를 위해서는 컨트롤이 컨테이너의 사이트를 알아야 하므로 니모닉에 대한 지원은 IOleObject에 대한 지원도 의미합니다. 또한 니모닉에 대한 지식에는 현재 위치 지원이 필요하므로 IOleInPlaceObject가 필요합니다.
컨트롤이 컨테이너-앰비언트 속성을 사용하는 경우 변경 의미 체계를 따르는 것이 필요하므로 변경 알림을 받으려면 이 인터페이스도 구현해야 합니다. 앰비언트 속성은 컨테이너 사이트의 IDispatch를 통해서만 사용할 수 있으므로 앰비언트 속성 지원은 컨트롤이 IDispatch::Invoke 호출을 생성할 수 있을 뿐만 아니라 IOleObject(사이트를 가져오기 위해)를 지원한다는 것을 의미합니다.
컨테이너가 이벤트를 처리하지 않을 때 알아야 하는 컨트롤에 대해 FreezeEvents 메서드가 필요합니다. 컨트롤이 이 조건을 알 수 있는 유일한 방법입니다. 다른 IOleControl 메서드가 구현되지 않도록 FreezeEvents가 격리된 경우에만 필요한 경우 IOleControlIOleObject 또는 IOleInPlaceObject 없이 단독으로 사용할 수 있습니다.
Idataobject
컨트롤에 제공할 속성이 있는 경우 컨트롤이 적어도 (a) 그래픽 렌더링을 제공할 수 있음을 나타냅니다(컨트롤에 시각적 개체가 있는 경우 CF_METAFILEPICT 최소) 및/또는 (b) 속성 집합입니다. GetData, QueryGetData, EnumFormatEtc, DAdvise, DUnadviseEnumDAdvise 메서드가 필요합니다. CF_METAFILEPICT 이외의 그래픽 형식에 대한 지원은 선택 사항입니다.
IViewObject2
컨트롤이 현재 위치 활성 상태가 아닌 경우 몇 가지 흥미로운 시각적 개체가 있음을 나타냅니다. 구현된 경우 컨트롤은 Draw, GetAdvise, SetAdviseGetExtent 메서드를 지원해야 합니다.
IDispatch
컨트롤에 (a) 사용자 지정 메서드 또는 (b) IDispatch::Invoke를 통해 지연 바인딩을 통해 사용할 수 있는 사용자 지정 속성이 있음을 나타냅니다. 또한 컨트롤이 다른 IDispatch 메서드를 통해 형식 정보를 제공하도록 요구합니다. 컨트롤은 하나만 연결된 여러 IDispatch 구현을 지원할 수 IID_IDispatch 다른 컨트롤에는 고유한 dispinterface 식별자가 있어야 합니다.
컨트롤은 사용자 지정 메서드 및 속성 액세스를 위한 이중 인터페이스를 제공하는 것이 좋지만 메서드 및 속성이 있는 경우 선택 사항입니다.
IConnectionPointContainer
컨트롤이 이벤트 또는 속성 변경 알림과 같은 하나 이상의 나가는 인터페이스를 지원한다는 것을 나타냅니다. IEnumConnectionPoints를 사용하여 별도의 개체가 필요한 EnumConnectionPoints를 포함하여 이 인터페이스를 사용할 수 있는 경우 이 인터페이스의 모든 메서드를 구현해야 합니다.
IConnectionPointContainer에 대한 지원은 개체가 IConnectionPointContainer 메서드를 통해 사용할 수 있는 IConnectionPoint를 사용하여 하나 이상의 관련 개체도 지원한다는 것을 의미합니다. 각 연결 지점 개체 자체는 IEnumConnections 인터페이스를 사용하는 다른 열거자 개체가 필요한 EnumConnections를 포함하여 전체 IConnectionPoint 인터페이스를 구현해야 합니다.
IProvideClassInfo
IProvideClassInfo2
개체가 IProvideClassInfo::GetClassInfo를 통해 직접 자체 coclass 형식 정보를 제공할 수 있음을 나타냅니다. 컨트롤이 이후 변형 IProvideClassInfo2를 지원하는 경우 IProvideClassInfo2::GetGUID를 통해 기본 원본 IID를 제공하는 기능도 나타냅니다. 이 인터페이스의 모든 메서드를 구현해야 합니다.
ISpecifyPropertyPages
다중 컨트롤 선택을 위해 속성 페이지를 표시할 때 컨테이너가 이 컨트롤의 속성 페이지를 다른 컨트롤의 페이지와 조정할 수 있도록 컨트롤에 표시할 수 있는 속성 페이지가 있음을 나타냅니다. 지원이 있는 경우 이 인터페이스의 모든 메서드를 구현해야 합니다.
IPerPropertyBrowsing
(a) 속성에 대한 표시 문자열을 제공하는 컨트롤의 기능을 나타냅니다. (b) 속성에 대해 미리 정의된 문자열과 값을 제공하고(c) 속성 dispID를 특정 속성 페이지에 매핑합니다. 이 인터페이스에 대한 지원은 위와 같이 IDispatch를 통한 속성에 대한 지원이 제공됨을 의미합니다. (c)가 지원되면 IPerPropertyBrowsing::MapPropertyToPage를 통해 매핑된 개체의 속성 페이지가 기본 IPropertyPage 인터페이스가 아닌 IPropertyPage2를 구현한다는 의미이기도 합니다.
IPersistStream
IPersistStreamInit
IPersistMemory
IPersistStorage
IPersistMoniker
IPersistPropertyBag
지속성 인터페이스를 참조하세요.
IOleCache
IOleCache2
컨트롤 시각적 개체의 컨테이너 캐싱에 대한 지원을 나타냅니다. 컨트롤은 일반적으로 OLE 함수 CreateDataCache를 통해 캐싱 지원 자체를 가져옵니다. 의미 있는 정적 콘텐츠가 있는 컨트롤만 이 작업을 수행하도록 선택해야 합니다(필수는 아니지만). 컨트롤이 캐싱을 전혀 지원하는 경우 단순히 데이터 캐시를 집계하고 데이터 캐시에서 IOleCacheIOleCache2 인터페이스를 모두 노출해야 합니다. IOleObject를 구현하는 컨트롤은 컨테이너가 제공하는 경우 IAdviseSink를 처리할 수 있어야 합니다. 컨테이너는 이 경우 컨트롤이 존재하지 않는 싱크를 호출하지 않도록 보장하지 않을 수 있습니다.
IExternalConnection
컨트롤이 자체에 대한 외부 링크를 지원한다는 것을 나타냅니다. 즉, 컨트롤이 OLEMISC_CANTLINKINSIDE 표시되지 않고 IOleObject::SetMonikerIOleObject::GetMoniker를 지원합니다. 컨테이너는 OLE의 원격 계층 내에서 호출이 생성될 때 이 인터페이스 자체를 쿼리하거나 직접 호출하지 않습니다.
IRunnableObject
일부 in-process 개체와 마찬가지로 컨트롤이 실행 중에서 로드되는 것을 구분한다는 것을 나타냅니다.

컨트롤