V automatizaci pomocí brzy vazby a pozdní vazba

Překlady článku Překlady článku
ID článku: 245115 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Svázat Automation server může ovlivnit mnoho činností v programu, například výkon, pružnost a maintainability.

Tento článek vysvětluje typy vazby k dispozici klientům automatizace a obě strany Každá metoda weighs.

Další informace

Automatizace je proces jedné součásti softwaru komunikuje, a řídí jinou součást softwaru společnosti pomocí komponent modelu COM). Je základem většiny komunikace mezi komponent používaných v jazycích, jako jsou například Visual Basic nebo Visual Basic pro aplikace a stal normální součástí většiny programů.

Systém je objekt, který podporuje IDispatch objekt automatizace rozhraní. Toto rozhraní umožňuje klientům volání metod a vlastností za běhu bez nutnosti znát přesné objekt že komunikuje se v době návrhu; proces nazývá pozdní vazba. Dnes však mohou být použity objekt automatizace prakticky libovolný objekt COM termín i ty, které nepodporují IDispatch (a proto nemůže být pozdní vazbou). Tento článek předpokládá objektu jsou automatizace podporuje oba způsoby vazby.

Co je vazba?

Vazba je proces odpovídající volání funkce zapsány programátor skutečné kódu (interní nebo externí), které implementuje funkce. Je tomu při kompilaci aplikace a všechny funkce nazývá kód musí být vázán před provedeny kód.

Pochopit proces představit "vazba" z hlediska publikování knihy. Představte si váš kód je jako text knihu, kde v určitých odstavce napsané něco jako "najdete v kapitole 12, stránku x Další podrobnosti. „ Nevíte, jaké číslo stránky je, dokud dokončené knihu, takže před odstavec lze číst, jako je určena, všechny stránky knihy musí být vázán společně a číslo správnou stránku vložen do odstavce. Počkejte knihy "vázat" před odkazovat jiných částí knihu.

Vazba softwaru je podobné. Váš kód je tvořen částmi, které potřebujete společně vyžádány před kód může být "čtení." Vazba je jednat nahrazení funkce názvy s adresy paměti (nebo paměti posuny být přesnější) kde kód bude „ přejít"při volání funkce. Adresa pro objekty COM. je posun paměti v tabulce (nazývá v tabulce) ukazatelů držené objektu. Vázaný funkce COM je vázán prostřednictvím v tabulce.

Struktura objektu COM je jednoduché. Pokud váš kód obsahuje odkaz na objekt, uchovává nepřímé ukazatel na začátek v tabulce. V tabulce je pole adres paměti, kde každá položka je různé funkce, které lze volat u daného objektu. Volání funkce třetí na objekt COM, přejít dolů tři položky v tabulce a potom přejít do umístění paměti dané došlo. Který spustí kód funkce a po dokončení, vrátí se zpět připraven spustit další řádek kódu.

+-[Code]------------+  +.................................[COM Object]...+
|                   |  : +-------------+                                :
|Set obj = Nothing -|--->| obj pointer |                                :
|                   |  : +-|-----------+                                :
+-------------------+  :   |   +-----------------+                      :
                       :   +-->| v-table pointer |                      :
                       :       +--|--------------+                      :
                       :          |                                     :
                       :          |  +----------------------------+     :
                       :  (3rd)   |  | Function 1 Address pointer |     :
                       : (Offset) |  +----------------------------+     :
                       :          |  | Function 2 Address pointer |     :
                       :          |  +----------------------------+     :
                       :          +->| Function 3 Address pointer |     :
                       :             +----------------------------+     :
                       +................................................+

				
Výše uvedený příklad ukazuje, co se stane při uvolnění objektu COM. Protože všechny objekty COM dědí IUnknown, jsou první tři položky v tabulce metody IUnknown. Když budete potřebovat uvolnit objekt, kód volá třetí funkce v tabulce v (IUnknown::Release).

Naštěstí tato práce provádí jazyka na pozadí. Jako programátor jazyka máte nikdy obchodujete přímo v tabulce. Ale tato struktura je jak vázán všechny objekty COM a je důležité, že jste obeznámeni s ním pochopit, jaké vazba je.

Prvotní vazby

Co je známá jako včasné (nebo v tabulce) vazby je například výše. Tento formulář trvá vazby pro všechny objekty COM umístěte kdykoli se nazývá rozhraní IUnknown objektu COM. Ale co o další funkce objektu? Jak nazýváte jeho aktualizovat metodu nebo vlastnost Parent jeho? Tyto jsou vlastní funkce, které jsou obvykle jedinečné objektu. Pokud nemůže být předpokládá jejich umístění v tabulce, jak můžete najít adresy funkce potřebné k jejich volání?

Odpověď, samozřejmě závisí na tom, zda znáte předem v tabulce na objekt vypadá jako. Pokud tak učiníte, můžete provést stejný proces brzy vazby k objektu vlastních metod stejně jako jeho metod IUnknown. Toto je co je obecně určena "brzy-vazbou."

Používat brzy vazbu na objekt, musíte znát jeho v tabulce vypadá jako. V aplikaci Visual Basic to lze provést přidáním odkaz na knihovnu typů, který popisuje objekt, jeho rozhraní (v tabulce) a všechny funkce, které lze volat na objektu. Po dokončení, které můžete deklarovat objekt určitého typu, jako a potom nastavit a použít v tabulce pomocí objektu. Například pokud jste chtěli automatizaci aplikace Excel pomocí brzy vazby by přidáte odkaz na "Microsoft Excel 8.0 Object Library" z dialogového okna Project|References a deklarovat proměnnou jako typu "Excel.Application" Od klepněte na všechny hovorů objektové proměnné by být včasné vázán:
' Set reference to 'Microsoft Excel 8.0 Object Library' in
' the Project|References dialog (or Tools|References for VB4 or VBA).

' Declare the object as an early-bound object
  Dim oExcel As Excel.Application

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via the v-table
  oExcel.Visible = True
				
Tato metoda funguje skvělý většinu času, ale co když neznáte přesný objekt, který budou používat v době návrhu? Například, co se stane, pokud potřebujete zcela hovořit více verzích nebo případně "Neznámý" objekt?

Pozdní vazba

COM zahrnuje IDispatch. Objekty, které implementují IDispatch jsou označeny mít dispinterface (Pokud je pouze rozhraní podporují) nebo duální rozhraní (Pokud mají vlastní rozhraní, které mohou včasné svázat). Klienti svázat IDispatch jsou označeny být "pozdní vazbou" protože přesné vlastnost nebo metoda jejich volání je určena v době spuštění je vyhledat pomocí metod IDispatch. Přechod zpět na příklad knihu dříve, představit jej jako probíhá podobně jako poznámky pod čarou, která vás přesměruje na obsah máte "vyhledat"číslo stránky na „ čtení čas"namísto nutnosti jej již existuje vytištěna v textu.

Hodnota magic rozhraní je řízena dvě funkce: GetIDsOfNames a Invoke. První funkce mapy názvů (řetězce) identifikátor (nazývá dispid), který zastupuje funkci. Jakmile znáte IDENTIFIKÁTOR pro funkce, které chcete volat, zavolejte ji pomocí funkce Invoke. Tento formulář vyvolání metody se nazývá "pozdní vazba."

V jazyka způsobem určit, jak je vázán objekt je opět podle deklarace objektu. Pokud deklarovat objektové proměnné jako "Objekt" jsou, ve skutečnosti oznamující jazyka použijte IDispatch a proto jsou pozdní vazba:
' No reference to a type library is needed to use late binding.
' As long as the object supports IDispatch, the method can 
' be dynamically located and invoked at run-time.

' Declare the object as a late-bound object
  Dim oExcel As Object

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via IDispatch
  oExcel.Visible = True
				
jako můžete zobrazit zbytek váš kód je stejný. Jediný rozdíl mezi brzy vazby a pozdní vazba (z hlediska kód si zapsat) je v deklaraci proměnné.

Je důležité Všimněte si, co je "pozdní vazbou" je volána funkce a nazývá není způsobem. Z dřívějších diskuse na vazbě obecně byste si všimnete, že IDispatch samotný je "včasné vázán:" že to znamená, že jazyka provede volání stejně libovolné volání COM jako nastavení vlastnosti Visible prostřednictvím v tabulce Položka (IDispatch::Invoke). Samotný objekt COM je zodpovědný za předávání volání správné funkce zviditelníte Excel. Tento indirection umožňuje jazyka klienta k být kompilován (svázaný, adresa platná funkce), ale stále není znáte přesnou funkce, která skutečně provést práci.

Vazba dispid

Některé automatizační klienti (Většina výrazně MFC 3.0 jazyka, ale také jazyka 5.0 a 6.0 s ohledem na prvky ActiveX) používat hybridní formuláře z pozdní vazba nazývá dispid vazby. Pokud objekt COM známé v době návrhu, můžete do mezipaměti a předávány přímo na IDispatch::Invoke bez třeba volat GetIDsOfNames v době spuštění dispids funkce, které se nazývají. To výrazně může zvýšit výkon, protože namísto volání dvě COM za funkce, potřebujete pouze jeden.

Dispid vazba není možnost můžete zvolit normálně v Visual Basic 5.0 nebo 6.0. Používá se pro objekty odkazované v knihovně typů, ale neobsahují vlastní rozhraní (tj pro objekty, které mají pouze dispinterface) a pro agregované prvky ActiveX však obecně používá časná vazba libovolné místo by normálně používat dispid vazby jazyka.

Který formulář vazby použít?

Odpověď na tuto otázku závisí množství v návrhu projektu jako nic jiného. Společnost Microsoft doporučuje nejdříve možného vazby téměř všech případech. Však může být důvodů pro výběr pozdní vazba.

Časná vazba je upřednostňovanou metodou. Je nejlepší provádějící, protože aplikace sváže přímo adresou volána funkce a je v postupu spuštění vyhledávání žádné zvláštní režii. Z hlediska celkovou rychlost provádění je nejméně dvakrát tak rychlá jako pozdní vazba.

Prvotní vazby také poskytuje bezpečnost typů. Pokud máte odkaz nastavit typ knihovny součásti, jazyka poskytuje podporu IntelliSense vám kód Každá funkce správně. Jazyka také varuje Pokud typ dat parametru nebo vrácená hodnota je nesprávná, ukládání mnoho času při zápisu a ladění kódu.

Pozdní vazba je stále užitečné v situacích, kde přesně rozhraní objektu není známa v době návrhu. Pokud aplikace zadání ve výrazu hovořit s více servery neznámý nebo potřebuje k vyvolání funkce podle názvu (například pomocí funkce Visual Basic 6.0 CallByName) potom potřebujete použít pozdní vazba. Pozdní vazba je také užitečné vyřešit problémy s kompatibilitou mezi více verzemi součást, která má nesprávně upraven nebo adaptovat jeho rozhraní mezi verzemi.

Výhody dané brzy vazby něm nejlepší volbou to možné.

Zachování kompatibility mezi více verzemi

Pokud používáte součást, která není znovu distribuovat s instalačním balíčkem a nelze zajistit přesné verze, bude být komunikujete při spuštění, rozhraní, která je kompatibilní s všechny verze součásti nebo (v některých případech) mají platit zvláštní pozornost brzy vazba volání metody, které mohou existovat v konkrétní verzi a řádně nezdaří, pokud není k dispozici ve verzi klienta systému nainstalován metodu použijte pozdní vazba.

Aplikace Microsoft Office poskytují dobrým příkladem takové servery COM. Aplikace sady Office obvykle rozbalte jejich rozhraní přidat nové funkce nebo správné předchozí vyskytují chyby mezi verzemi. Pokud potřebujete automatizovat aplikace systému Office, je doporučeno, brzké svážete nejstarší verzi produktu očekáváte mohl být nainstalován na váš klient systému. Například pokud budete muset automatizovat Excel 95, Excel 97, Excel 2000 a Excel 2002, použijte knihovnu typů pro Excel 95 (XL5en32.olb) Pokud chcete zachovat kompatibilitu s všechny tři verze.

Aplikace sady Office také ukazují, že objekt modely s velké duální rozhraní můžete zhoršení omezení v zařazovací některé platformách. Kód na všech platformách nejvhodnější použít IDispatch. Další informace o při práci se sadou Office zachování kompatibility aplikací, klepněte na následující číslo článku databáze Microsoft Knowledge Base:
247579Použít k automatizaci aplikace Office je to možné DISPID vazby

Odkazy

Další informace o COM v tabulkách a použití automatizace, naleznete v následujících publikacích:
Rogerson Dale, vnitřní COM, MSPRESS, ISBN: 1-57231-349-8.

Curland, Matta Advanced jazyka 6, DevelopMentor 0201707128.

Vlastnosti

ID článku: 245115 - Poslední aktualizace: 11. května 2007 - Revize: 7.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Office Ultimate 2007
  • Microsoft Office Enterprise 2007
  • Microsoft Office Professional 2007
  • Microsoft Office Professional Plus 2007
  • Microsoft Office Standard 2007
  • Microsoft Office Home and Student 2007
  • Microsoft Office Basic 2007
  • Microsoft Office 2003, All Editions
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Klíčová slova: 
kbmt kbautomation kbinfo KB245115 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:245115

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com