인터페이스 지원의 의미

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

인터페이스 주석/인터페이스를 지원하는 것이 무엇을 의미하나
IOleObject
컨트롤이 이벤트 이외의 다른 것에 대해 클라이언트 사이트와 통신해야 하는 경우(IConnectionPointContainer참조) IOleObject가 필요합니다. 이 인터페이스를 구현할 때 컨트롤은 SetHostNames, Close, EnumVerbs, Update, IsUpToDate, GetUserClassID, GetUserType, GetMiscStatus및 컨테이너의 IAdviseSink 구현과 함께 작동하는 Advise, UnadviseEnumAdvise 메서드의 의미 체계도 지원해야 합니다. IOleObject를 구현하는 컨트롤은 컨테이너가 IAdviseSink를 제공하는 경우 IAdviseSink를 처리할 수 있어야 합니다. 컨테이너는 컨트롤이 존재하지 않는 싱크를 호출하려고 시도하지 않도록 할 수 없습니다.
IOleInPlaceObject
현재 위치로 활성화되고 UI가 활성화될 수 있는 컨트롤의 기능을 표현합니다. 이 인터페이스는 컨트롤에 활성화할 수 있는 일종의 사용자 인터페이스가 있으며 IOleInPlaceActiveObject도 지원됨을 의미합니다. 필요한 메서드는 GetWindow, InPlaceDeactivate, UIDeactivate, SetObjectRectsReactivateAndUndo입니다. 이 인터페이스를 지원하려면 IOleObject를 지원해야 합니다.
IOleInPlaceActiveObject
IOleInPlaceObject를 지원하는 내부 지원 개체도 이 인터페이스를 제공해야 하지만 컨트롤 자체가 인터페이스를 직접 구현할 필요는 없습니다.
IOleControl
컨트롤의 기능과 (a) 스니모닉(GetControlInfo, OnMnemonic 메서드), (b) 앰비언트 속성(OnAmbientPropertyChange)및/또는 (c) 컨트롤에서 컨테이너가 처리해야 하는 이벤트를 처리하려는 요구(FreezeEvents )를 표현합니다. mnemonics는 IOleInPlaceActiveObject를통해 처리되는 액셀러레이터와 다릅니다. mnemonics는 연결된 UI를 가지며 컨트롤이 UI 활성 상태가 아닌 경우에도 활성화됩니다. mnemonics에 대한 컨트롤의 지원은 컨트롤이 컨테이너의 IOleControlSite::OnControlInfoChanged 메서드를 사용하는 방법도 알고 있음을 의미합니다. 이렇게 하려면 컨트롤이 컨테이너의 사이트를 알아야 하므로 mnemonics에 대한 지원은 IOleObject에 대한 지원도 의미합니다. 또한 mnemonics에 대한 지식에는 현재 위치 지원이 필요하므로 IOleInPlaceObject가 필요합니다.
컨트롤이 컨테이너 앰비언트 속성을 사용하는 경우 변경 의미 체계에 따라 변경 알림을 받으려면 이 인터페이스도 구현해야 합니다. 앰비언트 속성은 컨테이너 사이트의 IDispatch를 통해서만 사용할 수 있으므로 앰비언트 속성 지원은 컨트롤이 IDispatch::Invoke 호출을 생성할 수 있을 뿐만 아니라 IOleObject(사이트를 얻기 위해)를 지원함을 의미합니다.
FreezeEvents 메서드는 컨테이너가 이벤트를 처리하지 않을 시기를 알아야 하는 컨트롤에 필요합니다. 이것이 컨트롤이 이 조건을 알 수 있는 유일한 방법입니다. 다른 IOleControl 메서드가 구현되지 않도록 FreezeEvents가 격리된 경우에만 필요한 경우 IOleControl은 IOleObject 또는 IOleInPlaceObject없이 독립 실행형일 수 있습니다.
Idataobject
컨트롤이 적어도 (a) 컨트롤의 그래픽 렌더링을 제공할 수 있음을 나타냅니다(컨트롤에 시각적 개체가 있는 경우 CF _ METAFILEPICT는 최소) 및/또는 (b) 속성 집합(컨트롤에 제공할 속성이 있는 경우). GetData, QueryGetData, EnumFormatEtc, DAdvise, DUnadviseEnumDAdvise 메서드가 필요합니다. CF METAFILEPICT 이외의 그래픽 형식에 대한 _ 지원은 선택 사항입니다.
IViewObject2
컨트롤이 현재 위치 활성이 아닌 경우 컨트롤에 몇 가지 흥미로운 시각적 개체가 있음을 나타냅니다. 구현된 경우 컨트롤은 Draw, GetAdvise, SetAdviseGetExtent메서드를 지원해야 합니다.
IDispatch
컨트롤에 (a) 사용자 지정 메서드 또는 (b) IDispatch::Invoke를 통해 지연 바인딩을 통해 사용할 수 있는 사용자 지정 속성이 있음을 나타냅니다. 또한 컨트롤이 다른 IDispatch 메서드를 통해 형식 정보를 제공해야 합니다. 컨트롤은 IID IDispatch와 연결된 하나의 IDispatch 구현만 있고 다른 컨트롤에는 _ 고유한 dispinterface 식별자가 있어야 하는 여러 IDispatch 구현을 지원할 수 있습니다.
컨트롤은 사용자 지정 메서드 및 속성 액세스를 위한 이중 인터페이스를 제공하는 것이 좋지만 메서드 및 속성이 있는 경우 선택 사항입니다.
IConnectionPointContainer
컨트롤이 이벤트 또는 속성 변경 알림과 같은 하나 이상의 나가는 인터페이스를 지원함을 나타냅니다. IEnumConnectionPoints와 별도의 개체가 필요한 EnumConnectionPoint를 포함하여 이 인터페이스를 사용할 수 있는 경우 이 인터페이스의 모든 메서드를 구현해야 합니다.
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를 통해 캐싱 지원 자체를 얻습니다. 의미 있는 정적 콘텐츠가 있는 컨트롤만 이 작업을 수행하도록 선택해야 합니다(필수는 아니지만). 컨트롤이 캐싱을 지원하는 경우 데이터 캐시를 집계하고 데이터 캐시에서 IOleCache 및 IOleCache2 인터페이스를 모두 노출해야 합니다. IOleObject를 구현하는 컨트롤은 컨테이너가 IAdviseSink를 제공하는 경우 IAdviseSink를 처리할 수 있어야 합니다. 컨테이너는 컨트롤이 존재하지 않는 싱크를 호출하려고 시도하지 않도록 할 수 없습니다.
IExternalConnection
컨트롤이 자체에 대한 외부 링크를 지원함을 나타냅니다. 즉, 컨트롤이 OLEMISC _ CANTLINKINSIDE로 표시되지 않고 IOleObject::SetMonikerIOleObject::GetMoniker를 지원합니다. 컨테이너는 OLE의 Remoting 계층 내에서 호출이 생성될 때 이 인터페이스 자체를 쿼리하거나 직접 호출하지 않습니다.
IRunnableObject
일부 in-process 개체처럼 컨트롤이 로드되는 것을 구분한다는 것을 나타냅니다.

컨트롤