Freigeben über


Was bedeutet die Unterstützung für eine Schnittstelle?

Neben der IUnknown-Schnittstelle drückt ein ActiveX-Steuerelement oder COM-Objekt die optionalen Funktionen aus, die es über zusätzliche Schnittstellen unterstützt. Das heißt, dass keine anderen Schnittstellen mehr als IUnknown erforderlich sind. Zu diesem Zweck enthält die folgende Tabelle die Schnittstellen, die ein ActiveX-Steuerelement möglicherweise unterstützt, und was es bedeutet, diese Schnittstelle zu unterstützen.

Schnittstelle Kommentare/Was es bedeutet, die Schnittstelle zu unterstützen
IOleObject
Wenn das Steuerelement die Kommunikation mit seiner Clientwebsite für andere Ereignisse erfordert (siehe IConnectionPointContainer), ist IOleObject eine Notwendigkeit. Beim Implementieren dieser Schnittstelle muss das Steuerelement auch die Semantik der folgenden Methoden unterstützen: SetHostNames, Close, EnumVerbs, Update, IsUpToDate, GetUserClassID, GetUserType, GetMiscStatus und die Methoden Advise, Unadvise und EnumAdvise , die in Verbindung mit der IAdviseSink-Implementierung eines Containers funktionieren. Ein Steuerelement, das IOleObject implementiert, muss IAdviseSink verarbeiten können, wenn der Container eins bereitstellt. ein Container darf nicht, in diesem Fall stellt ein Steuerelement natürlich sicher, dass es nicht versucht, eine nicht vorhandene Senke aufzurufen.
IOleInPlaceObject
Drückt die Fähigkeit des Steuerelements aus, an Ort und Stelle aktiviert und möglicherweise die Benutzeroberfläche aktiviert zu werden. Diese Schnittstelle bedeutet, dass das Steuerelement über eine Benutzeroberfläche verfügt, die aktiviert werden kann, und IOleInPlaceActiveObject wird ebenfalls unterstützt. Erforderliche Methoden sind GetWindow, InPlaceDeactivate, UIDeactivate, SetObjectRects und ReactivateAndUndo. Die Unterstützung für diese Schnittstelle erfordert Unterstützung für IOleObject.
IOleInPlaceActiveObject
Ein direkt fähiges Objekt, das IOleInPlaceObject unterstützt, muss auch diese Schnittstelle bereitstellen, obwohl das Steuerelement selbst die Schnittstelle nicht unbedingt direkt implementiert.
IOleControl
Gibt die Fähigkeit und den Wunsch des Steuerelements zum Umgang mit (a) mnemonics (GetControlInfo, OnMnemonic-Methoden ), (b) Umgebungseigenschaften (OnAmbientPropertyChange) und/oder (c) Ereignissen aus, die vom Container verarbeitet werden müssen (FreezeEvents). Beachten Sie, dass mnemonics sich von Accelerators unterscheidet, die über IOleInPlaceActiveObject behandelt werden: mnemonics verfügt über eine zugeordnete Benutzeroberfläche und ist auch dann aktiv, wenn das Steuerelement nicht aktiv ist. Die Unterstützung für mnemonics eines Steuerelements bedeutet, dass das Steuerelement auch weiß, wie die IOleControlSite::OnControlInfoChanged-Methode des Containers verwendet wird. Da dies das Steuerelement erfordert, um den Standort des Containers zu kennen, bedeutet die Unterstützung für mnemonics auch unterstützung für IOleObject. Darüber hinaus erfordert das Wissen über Mneemonics eine direkte Unterstützung und somit IOleInPlaceObject.
Wenn ein Steuerelement Containerumgebungseigenschaften verwendet, muss es auch diese Schnittstelle implementieren, um Änderungsbenachrichtigungen zu empfangen, da die Semantik von Änderungen erforderlich ist. Da Umgebungseigenschaften nur über den IDispatch der Containerwebsite verfügbar sind, bedeutet die Unterstützung von Ambient-Eigenschaften, dass das Steuerelement IOleObject unterstützt (um die Website abzurufen) sowie IDispatch::Invoke-Aufrufe generieren kann.
Die FreezeEvents-Methode ist für Steuerelemente erforderlich, die wissen müssen, wenn ein Container ein Ereignis nicht verarbeiten wird. Dies ist die einzige Möglichkeit, um diese Bedingung zu kennen. Wenn FreezeEvents nur isoliert erforderlich ist, sodass andere IOleControl-Methoden nicht implementiert werden, kann IOleControl ohne IOleObject oder IOleInPlaceObject eigenständig stehen.
Idataobject
Gibt an, dass das Steuerelement mindestens (a) grafische Renderings des Steuerelements bereitstellen kann (CF_METAFILEPICT ist das Minimum, wenn das Steuerelement überhaupt über Visuals verfügt) und/oder (b) Eigenschaftensätze bereitstellen kann, wenn das Steuerelement über Eigenschaften verfügt, die bereitgestellt werden müssen. Die Methoden GetData, QueryGetData, EnumFormatEtc, DAdvise, DUnadvise und EnumDAdvise sind erforderlich. Die Unterstützung für andere grafische Formate als CF_METAFILEPICT ist optional.
IViewObject2
Gibt an, dass das Steuerelement über einige interessante Visuals verfügt, wenn es nicht an Ort und Stelle aktiv ist. Bei Implementierung muss ein Steuerelement die Methoden Draw, GetAdvise, SetAdvise und GetExtent unterstützen.
IDispatch
Gibt an, dass das Steuerelement entweder über (a) benutzerdefinierte Methoden oder (b) benutzerdefinierte Eigenschaften verfügt, die beide über die späte Bindung über IDispatch::Invoke verfügbar sind. Dies erfordert auch, dass das Steuerelement Typinformationen über andere IDispatch-Methoden bereitstellt. Ein Steuerelement kann mehrere IDispatch-Implementierungen unterstützen, bei denen nur eine mit IID_IDispatch die anderen über ihre eigenen eindeutigen Dispinterface-Bezeichner verfügen müssen.
Ein Steuerelement wird empfohlen, duale Schnittstellen für den Zugriff auf benutzerdefinierte Methoden und Eigenschaften zur Verfügung zu stellen. Dies ist jedoch optional, wenn Methoden und Eigenschaften vorhanden sind.
IConnectionPointContainer
Gibt an, dass ein Steuerelement mindestens eine ausgehende Schnittstelle unterstützt, z. B. Ereignisse oder Benachrichtigungen zu Eigenschaftenänderungen. Alle Methoden dieser Schnittstelle müssen implementiert werden, wenn diese Schnittstelle überhaupt verfügbar ist, einschließlich EnumConnectionPoints , das ein separates Objekt mit IEnumConnectionPoints erfordert.
Unterstützung für IConnectionPointContainer bedeutet, dass das Objekt auch ein oder mehrere verwandte Objekte mit IConnectionPoint unterstützt, die über IConnectionPointContainer-Methoden verfügbar sind. Jedes Verbindungspunktobjekt selbst muss die vollständige IConnectionPoint-Schnittstelle implementieren, einschließlich EnumConnections, die ein weiteres Enumeratorobjekt mit der IEnumConnections-Schnittstelle erfordert.
IProvideClassInfo
IProvideClassInfo2
Gibt an, dass das Objekt seine eigenen Coklassentypinformationen direkt über IProvideClassInfo::GetClassInfo bereitstellen kann. Wenn das Steuerelement die spätere Variante IProvideClassInfo2 unterstützt, gibt es auch seine Fähigkeit an, seine primäre Quelle IID über IProvideClassInfo2::GetGUID bereitzustellen. Alle Methoden dieser Schnittstelle müssen implementiert werden.
Ispecifypropertypages
Gibt an, dass das Steuerelement Über Eigenschaftenseiten verfügt, die so angezeigt werden können, dass ein Container die Eigenschaftenseiten dieses Steuerelements mit den Seiten eines anderen Steuerelements koordinieren kann, wenn Eigenschaftenseiten für eine Auswahl mit mehreren Steuerelementen angezeigt werden sollen. Alle Methoden dieser Schnittstelle müssen implementiert werden, wenn Unterstützung vorhanden ist.
IPerPropertyBrowsing
Gibt die Fähigkeit des Steuerelements an, (a) eine Anzeigezeichenfolge für eine Eigenschaft bereitzustellen, (b) vordefinierte Zeichenfolgen und Werte für seine Eigenschaften bereitzustellen und/oder (c) eine Eigenschaft dispID einer bestimmten Eigenschaftenseite zuzuordnen. Unterstützung für diese Schnittstelle bedeutet, dass die Unterstützung für Eigenschaften über IDispatch wie oben bereitgestellt wird. Wenn (c) unterstützt wird, bedeutet dies auch, dass die Eigenschaftenseiten des Objekts, die über IPerPropertyBrowsing::MapPropertyToPage zugeordnet sind, IPropertyPage2 im Gegensatz zur grundlegenden IPropertyPage-Schnittstelle implementieren.
Ipersiststream
IPersistStreamInit
IPersistMemory
IPersistStorage
IPersistMoniker
IPersistPropertyBag
Siehe Persistenzschnittstellen.
IOleCache
IOleCache2
Gibt die Unterstützung für die Containerzwischenspeicherung von Steuerelementvisuals an. Ein Steuerelement erhält in der Regel selbst Unterstützung für die Zwischenspeicherung über die OLE-Funktion CreateDataCache. Nur Steuerelemente mit aussagekräftigen statischen Inhalten sollten sich dafür entscheiden (obwohl dies nicht erforderlich ist). Wenn ein Steuerelement die Zwischenspeicherung überhaupt unterstützt, sollte es einfach den Datencache aggregieren und sowohl IOleCache - als auch IOleCache2-Schnittstellen aus dem Datencache verfügbar machen. Ein Steuerelement, das IOleObject implementiert, muss IAdviseSink verarbeiten können, wenn der Container eins bereitstellt. ein Container darf nicht, in diesem Fall stellt ein Steuerelement natürlich sicher, dass es nicht versucht, eine nicht vorhandene Senke aufzurufen.
IExternalConnection
Gibt an, dass das Steuerelement externe Links zu sich selbst unterstützt; Das heißt, das Steuerelement ist nicht mit OLEMISC_CANTLINKINSIDE gekennzeichnet und unterstützt IOleObject::SetMoniker und IOleObject::GetMoniker. Ein Container fragt weder diese Schnittstelle selbst ab, noch ruft sie direkt auf, da Aufrufe aus der Remotingebene von OLE generiert werden.
IRunnableObject
Gibt an, dass sich das Steuerelement vom Laden von der Ausführung unterscheidet, wie es bei einigen In-Prozess-Objekten derEntst ist.

Steuerelemente