Pomocou včasnú väzbu a neskoré záväzné v automatizácie

Preklady článku Preklady článku
ID článku: 245115 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Ako môžete naviazať na automatizačný server môže ovplyvniť veľa vecí v programe, ako je výkon, flexibilitu a schopnosť údržby.

Tento článok popisuje typy záväzné dostupných Automatizácia klientom, a váži oboch stranách každej metódy.

DALSIE INFORMACIE

Automatizácia je proces, ak jedna súčasť softvéru komunikuje s a/alebo kontroluje inú súčasť softvéru pomocou spoločnosti Microsoft Component Object Model (COM). Je základom pre väčšinu kríž-komponentu používané v jazykoch, napríklad Visual Basic alebo Visual Basic pre komunikačné Aplikácie, a stala bežnú súčasť väčšina programov.

Historicky objekt automatizácie je akýkoľvek objekt, ktorý podporuje IDispatch rozhranie. Toto rozhranie umožňuje klientom volať metódy a vlastnosti pri spustení čas bez potreby poznať presný objekt komunikujú s na čase návrhu; proces sa nazýva neskoro záväzné. V súčasnosti však termín Automatizácia objekt možno použiť na prakticky akýkoľvek objekt COM, dokonca aj tých, čo robiť nepodporuje IDispatch (a preto nemôže byť viazané na neskoré). Tento článok predpokladá objektu sú automatizácia podporuje obe metódy záväzné.

Čo je záväzné?

Záväzné je proces konkurujúcich funkcie volania napísal programátor na aktuálny kód (vnútorné alebo vonkajšie), ktorá implementuje Funkcia. Je to hotovo, keď žiadosť je zostavený a všetky funkcie volané kód musí byť naviazaný pred kód môžu byť vykonané.

Pochopiť proces, myslím, že "väzby" z hľadiska publishing knihu. Predstavte si vaše kód je rovnako ako text knihy, kde v niektorých odseku ste napísali niečo ako "pozri stranu 12, kapitola x pre viac informácií. ” Neviete, čo číslo strany je, kým kniha je hotové, tak pred odsek, môže byť čítať ako určené, všetky stránky knihy musia viazané dohromady a správne stránky číslo vloží do odseku. Počkať na knihy, ktoré sa "viazaný" pred možno získavať informácie z iných častí knihy.

Záväzné softvér je podobný. Váš kód sa skladá z častí, ktoré je potrebné sa zdvihne spolu pred kód môže „čítať. ” Záväzné je aktom nahradenie názvy funkcií s adresy pamäte (alebo pamäte posuny, ktoré majú byť presnejšie) Ak kód bude "prejsť na" keď je aktivovaná funkcia. Pre objekty COM, adresa je pamäť posun v tabuľke ukazovateľov (nazývané tabuľky v) držbe objekt. Keď funkcia COM je viazaný, je viazaný prostredníctvom v tabuľke.

Štruktúra objekt COM je jednoduché. Keď váš kód obsahuje odkaz na objekt, vlastní nepriamy ukazovateľ na začiatok v tabuľke. V tabuľke je pole adresy pamäte, ak je každý vstup rôzne funkcie, ktoré môžu byť povolaní na tomto objekte. Volať tretej Funkcia com objekt, budete skákať dole tri položky v tabuľke a potom Prejsť na pamäťové miesto na ňom uvedené. Ktorý spustí kód pre funkcia a keď úplné, vráti späť ste pripravení vykonať ďalší riadok kód.

+-[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 |     :
                       :             +----------------------------+     :
                       +................................................+

				
Vyššie uvedenom príklade zobrazuje, čo sa stane pri uvoľnení objektu. Pretože všetky objekty COM dedia od IUnknown, prvé tri položky v Tabuľka sú metódy, ktoré sa IUnknown. Ak potrebujete uvoľniť objekt, váš kód zavolá funkciu tretej v v tabuľke (IUnknown::Release).

Našťastie, táto práca sa vykonáva pomocou jazyka Visual Basic v zákulisí. Ako vizuálny Základné programátor, vám nikdy musieť vysporiadať s tabuľku v priamo. Ale toto štruktúra je ako sú viazané všetky objekty COM a je dôležité, že ste oboznámení s cieľom pochopiť aké záväzné.

Včasnú väzbu

Príklad vyššie je, čo je známe ako skoro (alebo v tabuľke) záväzné. Pre všetky objekty COM, táto forma záväzné berie umiestnite vždy, keď objekt COM IUnknown rozhrania sa nazýva. Ale čo ostatné funkcie objekt? Ako myslíte si jeho metódu obnovovania alebo jeho materskej nehnuteľností? Tieto sú vlastné funkcie, ktoré sú zvyčajne špecifické pre objekt. Ak ich miest v v tabuľke, nemôžeme predpokladať, ako si nájsť funkciu adresy potrebné na volať im?

Odpoveď, samozrejme, závisí od či viete vopred čo v tabuľke objektov vyzerá. Ak urobíte, môžete vykonať toho istého procesu včasnú väzbu k objektu vlastné metódy ako ste urobil jeho IUnknown metódy. Je to, čo sa vo všeobecnosti chápe pod "včasnú väzbu."

Použitie včasnú väzbu na objekt, musíte vedieť čo jej v tabuľke vyzerá. V jazyku Visual Basic, môžete to urobiť doplnením odkazu do typu knižnica, ktorá popisuje objekt, jeho rozhranie (tabuľka v) a všetky funkcie, ktoré môžu byť povolaní na objekte. Akonáhle to urobil, môžete deklarovať objekt ako určitý typ, potom nastaviť a používať, že objekt pomocou v tabuľke. Napríklad, ak ste chceli automatizovať programu Microsoft Office Excel pomocou skoré záväzné, bych pridať odkaz na "Microsoft Excel 8.0 Object Library" od Project|Odkazy dialógové okno a potom vyhlásiť vášho premenná ako typu „Excel.Application. ” Od tej doby všetky hovory uskutočnené na objekt premenná by byť predčasné viazané:
' 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
				
Táto metóda funguje veľká väčšina čas, ale čo keď neviete presné objekt budete používať v čase návrhu? Napríklad, čo robiť, keď ste potrebujete hovoriť na viacerých verzií programu Excel, alebo prípadne na "neznámy" objekt úplne?

Neskoré záväzné

COM zahŕňa IDispatch. Objekty, ktoré implementujú IDispatch sú povedal dispinterface (ak je iba rozhranie, ktoré podporujú) alebo dual rozhranie (ak majú tiež vlastné rozhranie, ktoré môžete skoré naviazať na). Klientov, ktoré sa viažu IDispatch sú povedal sú zaviazané "neskoro", pretože presný Vlastnosť alebo metódu sú volá je určená v čase spustenia pomocou metódy IDispatch na ich vyhľadanie. Vraciam sa do knihy príklad skôr, myslieť na ich ako ako poznámky pod čiarou, ktoré vás presmeruje do tabuľky obsahu kde ste Musím "vyhľadať" číslo strany v čase"čítať" skôr ako s už vytlačené tam v texte.

Kúzlo rozhranie je kontrolovaný Autor: dve funkcie: GetIDsOfNames a Invoke. Prvý mapy názvy funkcií (reťazcov) na identifikátor (tzv. dispid), ktorý predstavuje funkciu. Raz viete ID pre funkciu chcete volať, môžete volať pomocou Vyvolanie funkcie. Táto forma vyvolania metódy sa nazýva "neskoro záväzné."

Opäť v jazyku Visual Basic spôsob určíte, že ako je viazané objekt je objekt vyhlásením. Ak vyhlásiť premennej objektu ako "Objekt" v skutočnosti sú rozprávajú Visual Basic používať IDispatch, a preto sú neskoro záväzné:
' 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
				
Ako môžete vidieť, zvyšok vášho kódu je rovnaká. Jediný rozdiel medzi včasnú väzbu a neskoré záväzné (pokiaľ ide o kód píšete) je v variabilné vyhlásenie.

Je dôležité si uvedomiť, že to, čo je "neskoro viazané"sa nazýva funkcie a nie spôsob, ako sa nazýva. Z skoršie diskusiu o záväzné vo všeobecnosti by ste mali oznámenie že IDispatch je sám o sebe "skoré viazané:" to znamená že Visual Basic robí telefonátu nastaviť Vlastnosť prostredníctvom v tabuľke Položka (IDispatch::Invoke), pretože by akékoľvek COM hovor. Samotného objektu COM je zodpovedný za posielanie ďalej volanie správnu funkciu urobiť Excel viditeľné. Táto indirection umožňuje vizuálne Základné klient má kompilovať, (ktorý je viazaný na adresy platné funkcie), ale stále nevie presné funkcie, ktorá bude skutočne prácu.

Dispid väzba

Niektorí klienti automatizácie (most znatelně MFC a Visual Basic 3.0, ale aj Visual Basic 5.0 a 6.0 s ohľadom na ovládacie prvky ActiveX) použite hybridného formulára zo oneskorenú väzbu nazýva dispid záväzné. Ak objekt COM je známe v čase návrhu môžete vyrovnávacou dispids pre funkcie, ktoré sa nazývajú a odovzdané priamo na IDispatch::Invoke bez nutnosti volať GetIDsOfNames na Doba spracovania. Môže to zvýšiť výkon, pretože namiesto toho aby robili dva COM hovorov za funkciu, iba musíte urobiť jednu.

Je Dispid väzba nie možnosť môžete zvyčajne vybrať v jazyku Visual Basic 5.0 alebo 6.0. Používa sa pre objekty, ktoré sa uvádzajú v knižnici typu, ale neobsahujú vlastné rozhranie (t. j. pre objekty, ktoré majú len dispinterface) a pre agregované ovládacie prvky ActiveX, ale vo všeobecnosti Visual Basic používa včasnú väzbu akékoľvek miesto by bežne používate dispid záväzné.

Ktoré tvoria záväzné by používať?

Odpoveď na túto otázku závisí toľko na konštrukcii vaše projekt ako čokoľvek iného. Spoločnosť Microsoft odporúča včasnú väzbu v takmer všetkých prípadoch. Však môžu existovať príčiny pre výber neskoro záväzné.

Skoré záväzné je uprednostňovanou metódou. Je to najlepšie umelca, pretože vaše uplatňovanie viaže priamo na adresu funkciu nazýva a neexistuje žiadne dodatočné režijné robí run-time vyhľadávaním. Pokiaľ ide o celkový vykonanie rýchlosť, je aspoň dvakrát tak rýchlo ako neskoré záväzné.

Skoré záväzné tiež poskytuje typ bezpečnosť. Keď ste odkaz na knižnice typov súčasti Visual Basic poskytuje podporu IntelliSense pomôcť každá funkcia kód správne. Visual Basic tiež vás upozorní Ak typ údajov parameter alebo vrátená hodnota je nesprávna, ukladanie veľa času pri písaní a ladenie kódu.

Oneskorenou väzbou je stále užitočné v situáciách, kde presné rozhranie objektu nie je známa v čase návrhu. Ak váš žiadosť sa snaží hovoriť s viac neznáme serverov alebo potrebuje na vyvolanie funkcie podľa názvu (pomocou Visual Basic 6.0 CallByName napríklad funkcia) potom budete musieť použiť neskoro záväzné. Neskoro záväzné je tiež užitočné na prácu okolo problémov kompatibility medzi viacerými verzie komponentu, ktorý bol nesprávne upravený alebo prispôsobené jeho rozhranie medzi verziách.

Výhody poskytnuté včasnú väzbu sa to najlepšia voľba, kedykoľvek je to možné.

Zachovanie kompatibility cez viacero verzií

Ak použijete súčasť, ktorá vás nedistribuujte s vašej inštalácie balíka a nie je možné zabezpečiť presné verzie budete komunikáciu s počas behu, by mali venovať osobitnú pozornosť skoré viazať na rozhranie, ktoré je kompatibilný so všetkými verziami súčasti alebo (v niektorých prípadoch) použite neskoro záväzné volať metódy, ktoré môžu existovať v určitom verzia a neúspešnosti ladně, ak tento spôsob nie je prítomný vo verzii nainštalovaný v systéme klienta.

Poskytovať aplikácie balíka Microsoft Office dobrým príkladom takejto COM serverov. Kancelárske aplikácie zvyčajne rozšíri ich rozhrania pridať nové funkcie alebo predchádzajúcich nedostatkov medzi verziách. Ak potrebujete na automatizáciu aplikácie balíka Office, je odporúčané, že ste skoro naviazať na najbližšej verziu produktu aby ste si očakávať, že by mohol byť inštalovaný na vašom klienta systému. Napríklad, ak potrebujete môcť automatizovať Excel 95, Excel 97, Excel 2000 a Excel 2002, mali by ste použiť typ knižnice pre Excel 95 (XL5en32.olb) na zachovaní kompatibility s všetky tri verzie.

Kancelárske aplikácie taktiež preukázať, že objekt modely s veľké duálne rozhranie môže utrpieť obmedzenia v zoraďovacích na niektoré platformy. Pre váš kód fungovať najlepšie cez všetky platformy, použite IDispatch. Ďalšie informácie na zachovaní kompatibility pri práci s balíkom Office aplikácie, po kliknutí na nasledovné číslo článku databázy Microsoft Knowledge Base:
247579Na automatizáciu aplikácie balíka Office, kedykoľvek je to možné použiť DISPID väzba

ODKAZY

Ďalšie informácie o COM, v-tabuliek, a pomocou Automatizácia, nájdete v nasledujúcich knihách:
Rogerson, Dale, Vnútri COMMSPRESS, ISBN: 1-57231-349-8.

Curland, Matt, Rozšírené jazyka Visual Basic 6DevelopMentor, 0201707128.

Vlastnosti

ID článku: 245115 - Posledná kontrola: 23. októbra 2011 - Revízia: 3.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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 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
Kľúčové slová: 
kbautomation kbinfo kbmt KB245115 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:245115

Odošlite odozvu

 

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