Erken bağlama ve geç bağlama Otomasyon kullanma

Makale çevirileri Makale çevirileri
Makale numarası: 245115 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Nasıl bir Otomasyon sunucusu için bağlama programınızdaki performansı ve esnekliği yaşatılabilirlik gibi birçok şey etkileyebilir.

Bu makalede, otomasyon istemciler için kullanılabilir bağlama türü açıklanır ve her yöntemi her iki tarafına boyutlar.

Daha fazla bilgi

Otomasyon ve/burada bir yazılım bileşeni ile iletişim kurar veya Microsoft'un kullanarak başka bir yazılım bileşeni denetleyen bir süreçtir Bileşen Nesne Modeli (COM). Uygulamalar için Visual Basic'de veya Visual Basic gibi bir dilde kullanılan çoğu geçici bileşen iletişimini temelini oluşturur ve programların çoğunda normal bir parçası haline geldi.

Tarihsel olarak, bir Otomasyon ıdispatch destekleyen herhangi bir nesne nesnesidir arabirimi. Bu arabirim yöntemleri istemcilerin ve özelliklerinin tam nesne bilmek zorunda kalmadan çalışma zamanında, tasarım zamanında kurduğunuz; bir işlem olarak adlandırılan, geç bağlama. Günümüzde, ancak Otomasyon nesnesi, herhangi bir COM nesnesine uygulanabilir terimi, ıdispatch desteklemez (ve dolayısıyla geç bağlanamaz) bile. Bu makalede, her iki bağlama yöntemleri otomatikleştirme olan nesne destekleyen varsayılır.

Ne bağlanıyor?

Bağlama (iç veya dış) gerçek koduna ve işlevini uygulayan programcısı tarafından yazılmış olan işlev çağrıları eşleşen bir işlemdir. Derlenen uygulama ve kod yürütülebilecek önce kodda adlı tüm işlevleri bağlanmalıdır yapılır.

Işlem anlamak için <a0></a0>, "bağlama" açısından bir kitap yayımlamayı düşünün. Burada belirli bir paragrafa "Bölüm 12, sayfa x daha ayrıntılı bilgi için bkz: gibi." bir şey yazdığınız defterinin metni kodunuzu benzer düşünün. Sayfa numarasını kitabı tamamlandı, bu nedenle önceki paragrafın amaçlandığı şekilde okunabilir defterinin tüm sayfaları birbirine bağlı olması gerekir ve doğru sayfa numarasını paragraf eklenen kadar nedir bilmiyorum. "Diğer bölümleri rehberi ba?vurabilirsiniz önce ilişkili, <a0></a0>" rehberi için beklemeniz.

Yazılım bağlama benzer. Kodunuzu kodu "okunabilir önce." birlikte çekilecek gereken bölümleri oluşur Bağlama işlevini değiştirme işlemidir bellek adresleri (veya daha kesin olarak, bellek uzaklıklar) adları "işlevi çağrıldığında yeri kodu atlayacağı". COM nesneleri için nesne tarafından tutulan bellek uzaklık işaretçisi (v-tablo olarak da adlandırılır), bir tablodaki adrestir. Bir COM işlevi bağlandığında, v-tablo ile ilişkili.

Bir COM nesnesinin yapısı basittir. Kodunuzu bir nesneye başvuru içeren, v-tablonun en üstüne dolaylı bir işaretçi içerir. V-bellek adresleri dizisi olduğu her giriş o nesne üzerinde adlı farklı bir işlevi tablodur. Bir COM nesnesi üzerinde üçüncü işlevini çağırmak için <a0></a0>, üç girdi tablosunda aşağı atlamak ve sonra orada verilen bellek konumuna gitmek. Işlev kodu yürütür ve tamamlandığında, sonraki kod satırına çalıştırmaya hazır geri döndürür.

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

				
Yukarıdaki örneğin bir COM nesnesinin serbest bırakılması, ne olacağını gösterir. Tüm COM nesneleri, ıunknown ' devralır, çünkü ilk üç tabloda yöntemleri için ıunknown girişler. Nesne serbest gerektiğinde, kodunuz, v-tabloda (IUnknown::Release) üçüncü işlevini çağırır.

Neyse ki, bu iş planda Visual Basic tarafından yapılır. Bir Visual Basic Programcı, hiçbir zaman v tabloyla doğrudan gerekir. Ancak, bu yapıyı nasıl COM nesneleri bağlı olan ve, hangi bağlama anlamak için kendisiyle bildiğinizi önemlidir.

Erken bağlama

Yukarıdaki örnekte, ne kadar erken bilinen (veya tablo v) bağlama olur. Tüm COM nesneleri için bu biçimi bağlama alır, her bir COM nesnesinin ıunknown arabirimi çağrıldığında yerleştirin. Ancak nesnenin diğer işlevler nasıldır? Nasıl, kendi Refresh yöntemini veya üst özelliği veriyorsunuz? Bunlar, genellikle bir nesneye özgü özel işlevler. Nasıl konumlarına v tablosundaki kabul ederseniz, onları çağırmak için gereken işlevi adresleri bulmak?

Yanıt, kuşkusuz olup olmadığına önceden nesnenin v tablolu nasıl göründüğünü tanıdığınız üzerinde bağlıdır. Bunu yaparsanız, ıunknown yöntemlerinden olduğu gibi nesnenin özel yöntemlere aynı erken bağlama işlemi gerçekleştirebilirsiniz. Bu, "erken bağlama tarafından." genellikle yapısındaki

Erken bağlama, bir nesne üzerinde kullanmak için v-tablosunu arar bilmeniz gerekir. Visual Basic'te, bu nesne ve (v-table) arabirimi nesnede adlı tüm işlevleri açıklayan bir tür kitaplığına başvuru ekleyerek yapabilirsiniz. Tamamlandığında, ayarlayabilir olarak belirli bir türde nesne bildirmek sonra ve v-tablosunu kullanarak bu nesneyi kullanın. Örneğin, otomatikleştir Office erken bağlama kullanarak Excel'e isteseydiniz, "Microsoft Excel 8.0 Nesne Kitaplığı" başvuru Project|References iletişim kutusundan ekleyin ve değişkeniniz "Excel.Application.8" türü olarak bildirmek. Bundan sonra açık, nesne değişkenine yapılan tüm aramaların erken bağlı olması:
' 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
				
bu yöntem, çoğu zaman iyi çalışır, ancak tasarım zamanında ne tam, nesne tanımadığınız kullanacaksınız? Örneğin, ne, Excel'in birden çok sürümü veya büyük bir olasılıkla "Bilinmeyen" nesnesi, tamamen konuşma gerekiyor?

Geç bağlama

COM ıdispatch içerir. Nesneler, ıdispatch uygulayan bir görüntüleme'arabirimi (yalnızca arabirim destekledikleri ise) veya çift arabirim söylenir (da erken gerçekleştirebileceğiniz bir özel arabirim varsa bağlamak). Bunları bulmak için ıdispatch yöntemlerini kullanarak, çalışma zamanında, tam bir özellik veya yöntem, aradığınız belirlenir çünkü ıdispatch için bağlama istemcilerinin "geç bağlı" söylenir. Geri rehberi örneği için daha önce giderek, bunu "" zaman okuma sayfası numara "zaten varsa metin yazdırmak yerine aramak, <a0></a0>" olan içindekiler tablosu için yönlendiren bir dipnot gibi olacak şekilde düşünün.

Sihirli arabiriminin iki işlev tarafından kontrol edilir: GetIDsOfNames ve ınvoke. Ilk eşlemeler işlevi, işlevi temsil eden (bir dispid olarak da adlandırılır) bir tanımlayıcı ile (dize) adlandırır. Çağırmak istediğiniz işlevin KIMLIĞI bildiğiniz bir kez ınvoke işlevini kullanarak çağırabilirsiniz. Bu formu yöntem çağırma "geç bağlama." olarak adlandırılır

Yine, Visual Basic'te belirttiğiniz nesneye bağlı olduğu nesne bildirimi yoludur. Bir nesne değişkeni "Nesne" olarak bildirirseniz, aslında, ıdispatch kullanmak için Visual Basic belirten ve bu nedenle geç bağlama:
' 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
				
gördüğünüz gibi kodunuzu geri kalanı aynıdır. Erken bağlama ve geç bağlama (açısından yazdığınız kod) arasındaki tek fark, değişken bildiriminde ' dir.

Not ne "geç bağlı", çağrılan bir işlevi olan ve olmayan biçimde adlandırılır önemlidir. Genel olarak bağlama, önceki tartışma, fark, ıdispatch kendisi "erken bağlı:" başka bir deyişle çok deyin, Visual Basic, herhangi bir COM çağrısı gibi bir v-tablosu girdisi (IDispatch::Invoke) aracılığıyla Visible özelliğini ayarlamak için arama yapar. COM nesnesi, Excel, görünür yapmak için doğru işlev çağrısı iletmek için sorumludur. Bu yönlendirme (bir geçerli işlev adresine bağlı) Derlenecek Visual Basic istemci sağlar ancak yine de çalışma gerçekten yapmak tam işlev biliyor değil.

Dispid bağlama

(En önemli ölçüde MFC ve Visual Basic 3.0, ancak Ayrıca Visual Basic 5.0 ve 6. 0'ın ActiveX denetimleri için dikkate) istemcileri olarak geç bağlama karma form kullanmak için bazı Otomasyon dispid bağlama çağrıldı. COM nesnesi, tasarım zamanında biliniyorsa, çağrılan işlevlerin dispids önbelleğe ve olması doğrudan IDispatch::Invoke GetIDsOfNames zamanında arama gerek kalmadan iletilir. Işlevi her iki COM çağrı yapmak yerine, yalnızca birini yapmanız gerekir, çünkü bu performansı önemli ölçüde artırabilirsiniz.

Dispid bağlama, normal olarak Visual Basic 5.0 veya 6.0 seçebileceğiniz bir seçenek değil. Bir tür kitaplığında başvurulan, ancak özel bir arabirim içermeyen nesneler için kullanılan (diğer bir deyişle, yalnızca görüntüleme arabirimi olan nesneler için) ve için ActiveX denetimleri toplanan ancak, genel olarak, Visual Basic erken dispid bağlama normalde kullanırsınız herhangi bir yeri bağlama kullanır.

Hangi form bağlamanın kullanmalıyım?

Bu sorunun yanıtını, projenizin başka bir işlem olarak tasarımı üzerinde daha fazla bağlıdır. Microsoft, hemen hemen her durumda daha erken bağlama önerir. Ancak, geç bağlama seçme nedenleri olabilir.

Erken bağlama için tercih edilen yöntemdir. Uygulamanızın doğrudan çağrılan işlev adresi bağlar ve bir çalışma zamanı arama yaparsanız hiçbir ek yükü olduğu için en iyi performer olur. Toplam yürütme hızı açısından geç bağlama olarak en az iki katı kadar hızlı.

Erken bağlama, tür güvenliği de sağlar. Bileşen türü kitaplığı için ayarlanmış bir başvuru varsa, Visual Basic her işlevi doğru kodu yardımcı olmak için ıntellisense desteği sağlar. Visual Basic Ayrıca, bir parametresi veri türü veya dönüş değeri yazma ve hata ayıklama kodu, çok fazla zaman yanlıştır uyarır.

Geç bağlama yine de bir nesnenin tam arabirimi tasarım zamanında bilinmiyor durumlarda yararlıdır. Birden fazla bilinmeyen sunucularla anlaşmak uygulamanızın arar veya adıyla (örneğin, Visual Basic 6.0 CallByName işlevini kullanarak) işlevleri çağırmak için sonra geç bağlama kullanmanız gereken olur. Geç bağlama yanlış değiştirilmiş veya sürümler arasında arabirimi Cicero'nun bileşeninin birden çok sürümü arasında uyumluluk sorunlarını gidermek de yararlıdır.

Erken bağlama için verilen yararları, en iyi seçim mümkün kılar.

Birden çok sürümü arasında uyumluluk Bakımı

Bir bileşen kurulumu paketinizle birlikte yeniden dağıtabilir ve yararlandığından tam sürümü, çalışma zamanı sırasında size özel erken bileşeninin veya (bazı durumlarda) tüm sürümleri ile uyumlu bir arabirime dikkat iletişim emin edemiyor kullanacaksa belirli bir sürüm var ve bu yöntem istemci yüklü sürümü yoksa, olağan biçimde başarısız olmasına bir yöntemini çağırmak için geç bağlama kullanın.

Microsoft Office uygulamaları gibi COM sunucularının iyi bir örnek sağlar. Office uygulamaları, genelde yeni işlevsellik veya sürümler arasında doğru önceki eksikliklerinin eklemek arabirimlerini genişletecektir. Bir Office uygulamasını otomatikleştirmek istiyorsanız, erken beklediğiniz başlatmak için istemci'nın sistemde yüklü ürünün en eski sürümü bağlamak, önerilir. Excel 95 Excel 97, Excel 2000 ve Excel 2002 otomatikleştirmek istiyorsanız, örneğin, tür kitaplığı Excel 95 (XL5en32.olb) için üç sürümleriyle uyumluluğu korumak için kullanmalısınız.

Office uygulamaları da büyük ikili arabirim ile nesne modeli içindeki bazı platformlarda sıralanırken sınırlamaları düşebilir gösterilmektedir. Kendi kod tüm platformlarda en iyi çözüm, ıdispatch kullan. Office ile çalışırken, uyumluluk koruma hakkında daha fazla bilgi için uygulamalar Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
247579Mümkün olduğunda, Office uygulamalarını otomatikleştirmek için DISPID bağlama kullanın.

Referanslar

COM hakkında daha fazla bilgi için v-tabloları ve, Otomasyon kullanarak Lütfen aşağıdaki kitaplara bakın:
Rogerson Dale, iç COM, Microsoft Press YAYıNLARı, ISBN: 1-57231-349-8.

Curland, Matt, Visual Basic 6 Gelişmiş DevelopMentor, 0201707128.

Özellikler

Makale numarası: 245115 - Last Review: 11 Mayıs 2007 Cuma - Gözden geçirme: 7.2
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbautomation kbinfo KB245115 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:245115

Geri Bildirim Ver

 

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