Propojování a vkládání objektů - Object Linking and Embedding
![]() | tento článek potřebuje další citace pro ověření.Duben 2010) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Propojování a vkládání objektů (OLE) je proprietární technologie vyvinutá společností Microsoft , který umožňuje vkládání a propojení na dokumenty a další předměty. Pro vývojáře to přineslo OLE Control Extension (OCX), způsob, jak vyvíjet a používat prvky vlastního uživatelského rozhraní. Na technické úrovni je objekt OLE jakýkoli objekt, který implementuje IOleObject
rozhraní, případně spolu s celou řadou dalších rozhraní, v závislosti na potřebách objektu.
Přehled
OLE umožňuje aplikaci pro úpravy exportovat část dokumentu do jiné úpravy aplikace a poté jej importovat s dalším obsahem. Například a DTP systém může poslat nějaký text do a textový procesor nebo obrázek a bitmapový editor pomocí OLE. Hlavní výhodou OLE je přidání různých druhů dat do dokumentu z různých aplikací, jako je textový editor a editor obrázků. Tím se vytvoří Binární formát složeného souboru dokument a hlavní soubor, na který dokument odkazuje. Změny dat v hlavním souboru okamžitě ovlivní dokument, který na něj odkazuje. Toto se nazývá „propojení“ (místo „vložení“).
OLE se také používá k přenosu dat mezi různými aplikace použitím drag and drop a Schránka operace.
Dějiny
OLE 1.0
OLE 1.0, vydané v roce 1990, bylo evolucí originálu Dynamická výměna dat (DDE) koncept Microsoft vyvinutý pro dřívější verze Okna. Zatímco DDE bylo omezeno na přenos omezeného množství dat mezi dvěma spuštěnými aplikacemi, OLE byla schopna udržovat aktivní spojení mezi dvěma dokumenty nebo dokonce vkládání jeden typ dokumentu v jiném.
Servery a klienti OLE komunikují se systémovými knihovnami pomocí virtuální tabulky funkcí nebo VTBL. VTBL se skládá ze struktury ukazatele funkcí kterou může systémová knihovna použít ke komunikaci se serverem nebo klientem. Serverové a klientské knihovny, OLESVR.DLL a OLECLI.DLL, byly původně navrženy pro vzájemnou komunikaci pomocí WM_DDE_EXECUTE zpráva.
OLE 1.0 se později vyvinul a stal se architekturou pro softwarové komponenty známý jako Komponentní objektový model (COM) a později DCOM.
Když je objekt OLE umístěn do schránky nebo vložen do dokumentu, vizuální reprezentace v nativních formátech Windows (například bitmapa nebo metasoubor ), jakož i podkladová data ve vlastním formátu. To umožňuje aplikacím zobrazit objekt bez načtení aplikace použité k vytvoření objektu a zároveň umožňuje úpravy objektu, pokud je nainstalována příslušná aplikace.
The Balič objektů, součást OLE, dodávka z Windows 3.1 až do Windows XP umožňuje "zabalit" objekt, který není OLE, takže jej lze vložit do klienta OLE.
OLE 2.0
OLE 2.0 byl dalším vývojem OLE, sdílejícím mnoho stejných cílů jako verze 1.0, ale byl znovu implementován na vrcholu COM namísto přímého použití VTBL. Nové funkce byly Automatizace OLE, drag-and-drop, aktivace na místě a strukturované úložiště. Přezdívky se vyvinul z názvů objektů OLE 1 a poskytl podobný hierarchický systém pojmenování objektů a prostředků URL nebo URI, které byly samostatně vynalezeny. Windows nyní spojil dvě technologie podporující typ přezdívky URL a schéma přezdívky URL.
Vlastní ovládací prvky OLE
Vlastní ovládací prvky OLE byly zavedeny v roce 1994 jako náhrada za nyní zastaralé Rozšíření jazyka Visual Basic řízení. Namísto jejich upgradu byla nová architektura založena na OLE. Zejména jakýkoli kontejner, který podporoval OLE 2.0, už mohl vložit vlastní ovládací prvky OLE, i když tyto ovládací prvky nemohou reagovat na události, pokud to kontejner nepodporuje. Vlastní ovládací prvky OLE jsou obvykle dodávány ve formě a knihovna dynamických odkazů s příponou .ocx. V roce 1996 byla všechna rozhraní pro ovládací prvky (kromě IUnknown) volitelná, aby byla zachována velikost souboru ovládacích prvků, aby se stahovaly rychleji; tito pak byli voláni Ovládací prvky ActiveX.
Technické údaje
Objekty a kontejnery OLE jsou implementovány nad Komponentní objektový model; jsou to objekty, které mohou implementovat rozhraní pro export svých funkcí. Pouze IOleObject rozhraní je povinné, ale pokud je vyžadována funkce exportovaná těmito rozhraními, bude možná nutné implementovat i další rozhraní.
Pro snazší pochopení toho, co následuje, je třeba vysvětlit určitou terminologii. Stav pohledu objektu je, zda je objekt průhledný, neprůhledný nebo neprůhledný s plným pozadím, a zda podporuje kreslení se zadaným aspektem. Místo objektu je objekt představující umístění objektu v jeho kontejneru. Kontejner podporuje objekt webu pro každý obsažený objekt.
Následuje seznam rozhraní seskupený podle objektu, který je obvykle potřebuje implementovat. Rozhraní obvykle implementovaná objektem OLE jsou obvykle vyvolána kontejnerem OLE a naopak. Všimněte si, že v následujícím seznamu odsazení označuje dědičnost rozhraní. Všechna neodsazená rozhraní pocházejí z IUnknown.
Objekt OLE
- DataObject
- Když je implementováno, umožňuje přenos dat a upozornění na změny dat. Musí být implementováno objekty, které mají podporovat přetahování, kopírování nebo vkládání ze schránky nebo propojení nebo vložení do obsahujícího dokumentu.
- ObjectWithSite
- Umožňuje volajícímu informovat objekt OLE na svém webu. Tuto funkci poskytuje také OleObject, ale ObjectWithSite lze použít, pokud je podporováno, pokud OleObject se nepoužívá pro jiné záležitosti.
- OleCache
- Umožňuje vizuální prezentace z a DataObject do mezipaměti. To umožňuje vloženému objektu uložit jeho vizuální reprezentaci, což umožňuje jeho pozdější zobrazení, aniž byste museli spouštět aplikaci, která byla použita k vytvoření objektu.
- Obvykle se používá implementace akcií.
- OleCache2
- Poskytuje jemnější kontrolu nad ukládáním do mezipaměti.
- Obvykle se používá implementace akcií.
- OleCacheControl
- Toto rozhraní není voláno kontejnerem, ale interně objektem, aby mu bylo umožněno přijímat oznámení, když jeho DataObject běží, což mu umožňuje přihlásit se k odběru oznámení o změnách dat daného objektu a tím mu umožnit správnou aktualizaci prezentace uložené v mezipaměti.
- Obvykle se používá implementace akcií.
- OleDocument
- Umožňuje objektu OLE podporovat více zobrazení jeho dat a také několik souvisejících funkcí.
- OleDocumentView
- Objekt dokumentu (objekt, který se implementuje OleDocument) implementuje toto rozhraní pro každý pohled. Umožňuje volajícímu nastavit místo objektu, dotazovat se a nastavit velikost objektu a zobrazit a aktivovat jej, stejně jako některé související funkce.
- OleWindow
- OleInPlaceActiveObject
- Volá se nejvzdálenějším kontejnerem objektu k interakci s ním, když je aktivní, např. zpracovat akcelerační klíče ve frontě zpráv kontejneru, které jsou určeny pro obsažený objekt.
- OleInPlaceObject
- Volá se kontejnerem k aktivaci nebo deaktivaci objektu.
- IOleInPlaceObjectWindowless
- Objekt bez oken je objekt, který nemá vlastní okno, ale místo toho se zobrazuje v okně kontejneru. Kontejner jej používá k přenosu zpráv přijatých oknem kontejneru, které jsou určeny pro obsažený objekt. Například pokud je myš přesunuta nad oknem, Windows umístí zprávu o přesunu myši spolu se souřadnicemi myši do fronty zpráv v okně. Pokud toto okno obsahuje vložené objekty bez oken, bude pravděpodobně nutné zprávu přenést na takový objekt, pokud jsou nad tímto objektem souřadnice ukazatele myši. Z podobných důvodů toto rozhraní poskytuje také přístup k objektu DropTarget rozhraní.
- OleLink
- Umožňuje objektu podporovat propojení, např. povolením kontejneru nastavit zdroj propojeného objektu.
- Obvykle se používá implementace akcií.
- OleObject
- Pravděpodobně nejdůležitější rozhraní pro objekt OLE. Například umožňuje kontejneru informovat objekt svého webu, inicializovat objekt z dat, otevřít a zavřít jej, dotazovat se a nastavit velikost objektu, požádat o oznámení na kontejneru AdviseSink a provádět na objektu objekty definované jako „slovesa“. Tato slovesa často obsahují „Otevřít“ nebo „Upravit“, ale mohou zahrnovat i jiná slovesa. Jedno ze sloves je definováno jako hlavní sloveso a je provedeno, když uživatel dvakrát klikne na objekt.
- ViewObject
- Umožňuje objektu nakreslit se přímo, aniž by předal a DataObject do kontejneru. Pro objekty, které podporují obojí DataObject a toto rozhraní je obvykle sdílena základní implementace.
- ViewObject2
- Navíc umožňuje volajícímu dotazovat se na velikost objektu.
- ViewObjectEx
- Přidává podporu pro kreslení průhledných objektů bez blikání, testování zásahů pro objekty nepravidelných tvarů a nastavení velikosti objektu.
OLE kontejner
- IAdviseSink
- Umožňuje implementátoru přijímat oznámení, když je objekt uložen, zavřen nebo přejmenován, nebo když se změní jeho data nebo vizuální prezentace.
- IAdviseSink2
- Navíc umožňuje implementátoru přijímat oznámení, když se změní zdroj odkazu objektu OLE.
- IAdviseSinkEx
- Navíc umožňuje implementátoru přijímat oznámení, když se změní stav zobrazení objektu OLE.
- IOleClientSite
- Toto rozhraní umožňuje volajícímu získat informace o kontejneru a umístění objektu a také požadavek, aby byl objekt uložen, změněna jeho velikost, zobrazen, skrytý atd.
- IOleDocumentSite
- Umožňuje volajícímu okamžitě požádat o aktivaci objektu na tomto webu. Pokud je toto rozhraní implementováno, IOleClientSite, IOleInPlaceSite a IAdviseSink musí být také implementováno.
- IOleContainer
- Toto rozhraní umožňuje volajícímu vyčíslit vložené objekty v kontejneru nebo tyto objekty vyhledat podle názvu. Je to primárně užitečné, pokud si kontejner přeje podporovat odkazy na vložené objekty.
- IOleWindow
- IOleInPlaceUIWindow
- Umožňuje vloženým objektům vyjednat prostor pro panely nástrojů v okně kontejneru.
- IOleInPlaceFrame
- Umožňuje volajícímu požádat kontejner, aby vložil své položky nabídky do prázdné nabídky, která se stane kooperativní nabídkou. Také umožňuje volajícímu požádat kontejner o zobrazení nebo skrytí této nabídky, o zobrazení nebo skrytí dialogových oken a zpracování akceleračních kláves přijatých obsaženým objektem určeným pro kontejner.
- IOleInPlaceSite
- Pokud kontejner implementuje toto rozhraní, umožňuje vložené objekty aktivovat na místě, tj. Bez otevření v samostatném okně. Poskytuje přístup k kontejneru IOleInPlaceUIWindow.
- IOleInPlaceSiteEx
- Pokud kontejner implementuje toto rozhraní, umožňuje vloženým objektům zkontrolovat, zda je třeba při aktivaci nebo deaktivaci překreslit. Také jim umožňuje požádat o aktivaci jejich uživatelské rozhraní.
- IOleInPlaceSiteWindowless
- Pokud si kontejner přeje podporovat vložené objekty bez oken, musí poskytnout funkčnost vloženým objektům, aby nahradil funkce, které běžně poskytuje okno vloženého objektu. Například toto rozhraní poskytuje způsob přístupu k kontextu zařízení okna kontejneru, čímž umožňuje vloženému objektu kreslit v okně kontejneru.
- IOleUILinkContainer
- Obsahuje metody, které standardní dialogová okna OLE, která spravují propojené objekty, používají k aktualizaci propojených objektů v kontejneru nebo k dotazování a změně jejich zdrojů. Používá se v dialogových oknech „Odkazy“, „Změnit zdroj“, „Aktualizovat odkazy“ a „Vlastnosti objektu“.
- IOleUILinkInfo
- Dále umožňuje dialogovým oknům dotazovat se, kdy byly naposledy aktualizovány propojené objekty, a zda to bylo provedeno automaticky nebo ručně.
- IOleUIObjInfo
- Obsahuje metody potřebné v dialogovém okně „Vlastnosti objektu“. Například pokud uživatel otevře dialogové okno "Vlastnosti objektu" a požádá o převod objektu na jiný typ, zavolá se metoda na tomto rozhraní.
- IOleUndoManager
- Poskytuje centralizovanou službu vrácení zpět jak samotnému kontejneru, tak vloženým objektům. Když je provedena nevratná akce, an IOleUndoUnit je vytvořen a přidán do souboru IOleUndoManager
jiný
- IDataAdviseHolder
- Metody IDataObject které se týkají oznámení o změně dat, lze implementovat voláním metod tohoto rozhraní.
- Obvykle se používá implementace akcií.
- IOleAdviseHolder
- Metody IOleObject které se týkají oznámení, lze implementovat voláním metod tohoto rozhraní.
- Obvykle se používá implementace akcií.
- IDropSource
- Implementováno objekty, které lze přetáhnout, tj. Které mohou být zdrojem operací drag-and-drop. Při implementaci umožňuje objektu kreslit efekty přetažení a určit, kdy je objekt zrušen, nebo je operace přetažení zrušena.
- IDropTarget
- Implementováno objekty, které přijímají zahozené objekty, tj. Které mohou být cílem operací drag-and-drop. Když je implementován, umožňuje cíli určit, zda bude přijatý zrušený objekt a co se stane s objektem po jeho zrušení.
- IOleCommandTarget
- Lze implementovat pomocí objektů (objekty OLE, kontejnery OLE a další objekty), které chtějí podporovat určité standardní příkazy. Umožňuje volajícím dotazovat se, zda jsou příkazy podporovány, a provádět příkazy. Příkazy, které by objekt mohl obvykle chtít implementovat, mohou zahrnovat věci jako „odstranit“, „vyjmout“, „kopírovat“, „vložit“, „vrátit zpět“, „najít“, „tisknout“, „uložit“, „přiblížit“ a již brzy. V současné době je definováno 58 standardních příkazů, které zahrnují příkazy běžně používané kancelářským softwarem, webovými prohlížeči a podobnými aplikacemi.
- IOleUndoUnit
- Představuje akci, kterou lze vrátit zpět. Obsahuje všechny informace potřebné k vrácení akce. Je vytvořen objekty a kontejnery, takže do kontejneru lze přidat nevratné akce IOleUndoManager.
- IOleParentUndoUnit
- Umožňuje vrácené jednotce obsahovat další zpětné jednotky. V podstatě to umožňuje jednotce vrátit akci fungovat jako zásobník zpět a seskupit jednotky zpět. Například pokud je spuštěno makro, všechny akce, které nelze vrátit, mohou být seskupeny do jedné jednotky zpět.
- IOleWindow
- Toto rozhraní představuje okno kontejneru nebo obsaženého objektu. Umožňuje volajícím získat popisovač okna a přepínat kontextovou funkci nápovědy. Když je zapnuta funkce kontextové nápovědy, ukazatel myši se obvykle změní na šipku s otazníkem, což znamená, že kliknutím na prvek uživatelského rozhraní dojde k otevření okna nápovědy.
Soutěž
OpenDoc technologie se pokusila konkurovat OLE. Někteří konkurenti Microsoftu považovali OpenDoc za robustnější a snadněji použitelný; OpenDoc má nějaké známé problémy. OpenDoc umožňoval uživatelům prohlížet a upravovat informace napříč aplikacemi přímo v soutěži s proprietárním standardem OLE společnosti Microsoft. V roce 1993 založili někteří konkurenti společnosti Microsoft konsorcium s názvem Component Integration Laboratories („CIL“), aby vyvinuli OpenDoc jako otevřený standard pro propojení a vložení mezi platformami.
Společnost Microsoft požadovala kompatibilitu OLE jako podmínku certifikace kompatibility aplikace s Microsoftem Windows 95. Společnost Microsoft původně oznámila, že aplikace využívající OpenDoc budou považovány za kompatibilní s OLE, a obdrží certifikaci pro Windows 95. Microsoft později rozhodnutí zrušil a uvedl, že aplikace používající OpenDoc nemusí certifikaci získat vůbec. Společnost Microsoft zadržovala specifikace a ladila verze OLE až po vydání svých konkurenčních aplikací.
Interoperabilita
Použití objektů OLE omezuje interoperabilitu, protože tyto objekty nejsou široce podporovány v programech pro prohlížení nebo úpravy souborů mimo Microsoft Windows (např. Vkládání dalších souborů do souboru, jako jsou tabulky nebo grafy z tabulkové aplikace v textovém dokumentu nebo soubor prezentace).[1][2][3][4] Pokud software, který rozumí objektu OLE, není k dispozici, je objekt obvykle nahrazen obrázkem (bitmapová reprezentace objektu) nebo se vůbec nezobrazí.[5][6][7]
Viz také
- Automatizace OLE
- OLE pro řízení procesu (OPC)
- Komponentní objektový model (KOM)
- Distribuovaný komponentový objektový model (DCOM)
- Dynamická výměna dat (DDE)
- Typ internetového média
- Víceúčelová rozšíření pro internetovou poštu (MIM)
- Shscrap.dll (soubory šrotu)
Reference
- ^ Byfield, Bruce (2005-08-23). „Porovnávány textové procesory FOSS: OOo Writer, AbiWord a KWord“. Linux.com. Linuxová nadace. Citováno 2020-09-29.
- ^ Byfield, Bruce (2005-07-28). „Sdílení souborů mezi OpenOffice.org a Microsoft Office“. Linux.com. Linuxová nadace. Citováno 2020-09-29.
- ^ Sharma, Mayank (2008-11-20). „SoftMaker Office 2008 se zaměřuje na kompatibilitu s Microsoft Office“. Linux.com. Linuxová nadace. Citováno 2020-09-29.
- ^ Lagadec, Philippe (30. 11. 2006). „OpenOffice / OpenDocument a Microsoft Office 2007 / Open XML security“ (PDF). Konference PacSec 2006. Citováno 2020-09-29.
- ^ Gong, Rhett (05.09.2005). "RE: OLE objekt - bitmapová reprezentace?". Diskusní skupina: microsoft.public.win32.programmer.ole. Usenet: [email protected]. Citováno 2020-09-29.
- ^ O'Neill, Mike (09.02.2005). „Bohatý ovládací prvek úprav, který zobrazuje bitmapy a další objekty OLE“. Kódový projekt. Citováno 2020-09-29.
- ^ „ACC: Proč objekty OLE způsobují růst databází“. Microsoft. 2007-01-19. Archivovány od originál dne 2008-02-15.
externí odkazy
- ripOLE - extrahuje přílohy z dokumentů OLE
Tento článek je založen na materiálu převzatém z Zdarma online slovník výpočetní techniky před 1. listopadem 2008 a začleněno pod "licencování" podmínek GFDL, verze 1.3 nebo novější.