다음을 통해 공유


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

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

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

제어