Menggunakan ikatan dan ikatan dalam otomatisasi

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 245115 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Bagaimana Anda mengikat untuk server Otomatisasi dapat mempengaruhi banyak hal di program Anda, seperti kinerja, fleksibilitas, dan Kemampu-rawatan.

Artikel ini menjelaskan jenis mengikat tersedia untuk otomatisasi klien, dan berat kedua sisi dari setiap metode.

INFORMASI LEBIH LANJUT

Otomatisasi adalah proses di mana satu komponen software berkomunikasi dengan dan/atau mengendalikan komponen perangkat lunak lain yang menggunakan Microsoft Model objek komponen (COM). Ini adalah dasar untuk sebagian besar lintas-komponen komunikasi yang digunakan dalam bahasa-bahasa Visual Basic atau Visual Basic untuk Aplikasi, dan telah menjadi bagian dari sebagian besar program normal.

Secara historis, objek otomatisasi merupakan benda apapun yang mendukung IDispatch antarmuka. Antarmuka ini memungkinkan klien untuk memanggil metode dan properti di jalankan waktu tanpa harus tahu objek tepat mereka berkomunikasi dengan pada desain waktu; sebuah proses yang disebut ikatan. Hari ini, namun, istilah Otomatisasi objek dapat diterapkan pada hampir semua objek COM, bahkan mereka yang melakukan tidak mendukung IDispatch (dan karena itu tidak dapat terikat akhir). Artikel ini mengasumsikan objek yang Anda sedang mengotomatisasi mendukung kedua metode mengikat.

Apa yang mengikat?

Mengikat adalah proses pencocokan fungsi panggilan ditulis oleh programmer untuk kode aktual (internal atau eksternal) yang mengimplementasikan fungsi. Hal ini dilakukan ketika aplikasi dikompilasi, dan semua fungsi disebut dalam kode harus terikat sebelum kode dapat dieksekusi.

Untuk memahami proses, pikirkan "mengikat" dalam pengertian penerbitan buku. Bayangkan Anda kode adalah seperti teks di mana dalam ayat tertentu Anda telah menulis buku sesuatu seperti "lihat Bab 12, halaman x untuk rincian lebih lanjut." Anda tidak tahu apa nomor halaman adalah sampai buku selesai, jadi sebelum paragraf dapat membaca sebagaimana dimaksud, halaman-halaman buku harus diikat bersama-sama dan nomor halaman benar dimasukkan ke dalam paragraf. Anda menunggu buku menjadi "pasti" sebelum Anda dapat referensi bagian-bagian lain dari buku.

Mengikat perangkat lunak ini mirip. Kode Anda terdiri dari bagian-bagian yang perlu ditarik bersama-sama sebelum kode dapat "dibaca." Mengikat adalah tindakan menggantikan nama-nama fungsi dengan alamat memori (atau memori offset, untuk lebih tepatnya) di mana kode akan "melompat ke" ketika fungsi yang disebut. Untuk objek COM, alamat adalah offset memori dalam tabel petunjuk (disebut v-tabel) diselenggarakan oleh objek. Ketika COM fungsi terikat, terikat melalui v-meja.

Struktur objek COM sederhana. Ketika kode Anda memegang referensi ke objek, memegang pointer tidak langsung ke atas v-meja. V-tabel adalah sebuah array dari memori alamat di mana setiap entri berbagai fungsi yang dapat disebut pada benda tersebut. Untuk panggilan ketiga fungsi pada COM objek, Anda melompat turun tiga entri di atas meja dan kemudian melompat ke lokasi memori yang diberikan di sana. Yang mengeksekusi kode untuk fungsi dan, ketika menyelesaikan, kembali Anda kembali siap untuk mengeksekusi baris berikutnya kode.

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

				
Contoh di atas menunjukkan apa yang terjadi ketika melepaskan objek COM. Karena semua objek COM mewarisi dari IUnknown, entri pertama tiga dalam tabel adalah metode untuk IUnknown. Ketika Anda harus bebas objek, kode panggilan fungsi ketiga di tabel v (IUnknown::Release).

Untungnya, pekerjaan ini dilakukan oleh Visual Basic di belakang layar. Sebagai Visual Pemrogram BASIC, Anda tidak perlu berurusan dengan meja v langsung. Tapi, ini struktur bagaimana semua objek COM terikat, dan itu penting bahwa Anda akrab dengannya untuk memahami apa mengikat.

Ikatan

Contoh di atas adalah apa yang dikenal sebagai awal (atau v-tabel) mengikat. Untuk semua objek COM, bentuk mengikat mengambil tempat setiap kali objek COM IUnknown antarmuka disebut. Tapi bagaimana dengan fungsi-fungsi lain objek? Bagaimana Anda menelepon Refresh metode atau properti orang tua? Ini kebiasaan fungsi yang biasanya unik untuk obyek. Jika lokasi mereka dalam v-tabel tidak dapat diasumsikan, bagaimana Anda menemukan alamat fungsi yang diperlukan untuk memanggil mereka?

Jawabannya, tentu saja, tergantung pada apakah Anda tahu di muka apa benda v-tabel seperti. Jika Anda melakukannya, Anda dapat melakukan proses awal mengikat sama untuk objek kustom metode seperti yang Anda lakukan untuk yang IUnknown metode. Ini adalah apa yang umumnya dimaksudkan dengan "-ikatan."

Untuk menggunakan ikatan pada objek, Anda perlu tahu apa yang v-tabel tampak seperti. Dalam Visual Basic, Anda dapat melakukan ini dengan menambahkan referensi ke jenis perpustakaan yang menggambarkan objek, antarmuka (v-tabel), dan semua fungsi yang dapat disebut pada objek. Setelah itu selesai, Anda dapat menyatakan objek sebagai tipe tertentu, kemudian menetapkan dan menggunakan objek yang menggunakan v-meja. Sebagai contoh, jika Anda ingin mengotomatisasi Microsoft Office Excel menggunakan awal mengikat, Anda harus menambahkan referensi untuk "Microsoft Excel 8.0 perpustakaan objek" dari Project|Referensi dialog, dan kemudian menyatakan variabel Anda sebagai jenis "Excel.Application." Sejak saat itu pada, semua panggilan yang dibuat ke objek Anda variabel akan terikat awal:
' 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
				
Metode ini bekerja sebagian besar waktu, tetapi bagaimana jika Anda tidak tahu tepat objek yang Anda akan menggunakan desain saat ini? Misalnya, bagaimana jika Anda perlu bicara untuk beberapa versi Excel, atau mungkin ke objek "tidak diketahui" sama sekali?

Ikatan

COM termasuk IDispatch. Benda-benda yang menerapkan IDispatch berkata memiliki dispinterface (jika hanya antarmuka mereka mendukung) atau dual antarmuka (jika mereka juga memiliki antarmuka kustom yang Anda dapat awal mengikat). Klien yang mengikat untuk IDispatch dikatakan "terlambat terikat" karena tepat properti atau metode yang mereka Panggil ditentukan pada jangka waktu menggunakan metode dari IDispatch untuk menemukan mereka. Kembali ke contoh buku sebelumnya, memikirkan itu sebagai mirip sebuah catatan kaki yang mengarahkan Anda ke daftar isi di mana Anda harus "melihat" nomor halaman saat"membaca" daripada memiliki sudah tercetak di sana dalam teks.

Keajaiban antarmuka dikendalikan oleh dua fungsi: GetIDsOfNames dan Invoke. Nama-nama fungsi peta pertama (string) ke pengidentifikasi (disebut dispid) yang mewakili fungsi. Sekali Anda tahu ID untuk fungsi yang ingin Anda panggil, Anda dapat menggunakan Memanggil fungsi. Bentuk doa metode ini disebut "mengikat akhir."

Sekali lagi, dalam Visual Basic cara Anda menentukan bagaimana objek terikat adalah oleh Deklarasi objek. Jika Anda menyatakan variabel objek sebagai "Objek" Anda, pada kenyataannya, mengatakan Visual Basic untuk menggunakan IDispatch, dan karena itu terlambat mengikat:
' 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
				
Seperti yang Anda lihat, seluruh kode adalah sama. Satu-satunya perbedaan antara ikatan dan ikatan (dari segi kode Anda menulis) adalah di Deklarasi variabel.

Penting untuk dicatat bahwa apa "akhir terikat"adalah fungsi dipanggil dan cara yang tidak disebut. Dari sebelumnya diskusi mengenai mengikat secara umum, Anda akan melihat bahwa IDispatch itu sendiri adalah "awal terikat:" yang mengatakan bahwa Visual Basic membuat panggilan untuk mengatur properti terlihat melalui sebuah entry tabel v (IDispatch::Invoke) sebagai itu akan setiap panggilan COM. Objek COM itu sendiri bertanggung jawab atas penerusan panggilan untuk fungsi yang benar untuk membuat Excel terlihat. Tipuan ini memungkinkan Visual Dasar klien untuk dapat dikompilasi (yang, pasti akan fungsi yang benar alamat) tetapi masih tidak tahu fungsi yang tepat yang akan benar-benar melakukan pekerjaan.

Mengikat Dispid

Beberapa klien otomasi (kebanyakan terasa MFC dan Visual Basic 3.0, tetapi juga Visual Basic 5.0 dan 6.0 sehubungan dengan kontrol ActiveX) menggunakan hibrida bentuk akhir-akhir ini mengikat disebut dispid mengikat. Jika objek COM dikenal pada waktu perancangan, dispids untuk fungsi-fungsi yang disebut dapat di-cache dan melewati langsung ke IDispatch::Invoke tanpa perlu menelepon GetIDsOfNames di jangka waktu. Ini dapat sangat meningkatkan kinerja, karena alih-alih membuat dua COM panggilan per fungsi, Anda hanya perlu membuat satu.

Mengikat Dispid adalah bukan pilihan Anda biasanya dapat memilih dalam Visual Basic 5.0 atau 6.0. Digunakan untuk objek yang dirujuk dalam perpustakaan jenis tetapi tidak mengandung custom antarmuka (yaitu untuk objek yang memiliki dispinterface hanya) dan untuk kumpulan kontrol ActiveX tetapi, secara umum, Visual Basic menggunakan ikatan tempat Anda akan biasanya menggunakan dispid mengikat.

Bentuk yang mengikat yang harus saya gunakan?

Jawaban atas pertanyaan ini tergantung sebanyak mungkin di desain Anda proyek sebagai sesuatu yang lain. Microsoft menganjurkan ikatan di hampir semua kasus. Namun, mungkin ada alasan untuk memilih ikatan.

Awal mengikat adalah metode yang disukai. Ia adalah pemain terbaik karena Anda aplikasi mengikat langsung ke alamat fungsi dipanggil dan ada tidak ada tambahan overhead dalam melakukan pencarian run-time. Dalam jumlah keseluruhan kecepatan eksekusi, setidaknya dua kali lebih cepat, seperti ikatan.

Awal mengikat juga menyediakan jenis keamanan. Ketika Anda memiliki referensi diatur ke komponen perpustakaan jenis, Visual Basic menyediakan dukungan IntelliSense untuk membantu kode Anda masing-masing fungsi dengan benar. Visual Basic juga memperingatkan Anda jika data ketik parameter atau nilai kembali adalah salah, menghemat banyak waktu ketika menulis dan debugging kode.

Akhir mengikat masih berguna dalam situasi di mana antarmuka yang tepat dari objek tidak diketahui pada waktu-desain. Jika Anda aplikasi berusaha untuk berbicara dengan beberapa server yang tidak diketahui atau kebutuhan untuk memohon fungsi dengan nama (menggunakan Visual Basic 6.0 CallByName berfungsi sebagai contoh) maka Anda perlu menggunakan ikatan terbaru. Terlambat mengikat ini juga berguna untuk bekerja di sekitar masalah kompatibilitas antara beberapa Versi komponen yang tidak semestinya diubah atau disesuaikan antarmuka antara versi.

Keuntungan yang diberikan untuk ikatan membuatnya pilihan terbaik bila memungkinkan.

Menjaga kompatibilitas di beberapa versi

Jika Anda akan menggunakan komponen yang Anda tidak mendistribusi ulang dengan setup Anda paket, dan tidak yakin dari versi yang tepat Anda akan berkomunikasi dengan pada saat run-time, Anda harus membayar perhatian khusus untuk ikatan awal untuk sebuah antarmuka yang kompatibel dengan semua versi komponen, atau (dalam beberapa kasus) menggunakan ikatan terbaru untuk memanggil metode yang mungkin ada dalam tertentu Versi dan gagal anggun jika metode ini tidak ada dalam versi diinstal pada sistem klien.

Aplikasi Microsoft Office menyediakan sebuah contoh yang baik seperti server COM. Aplikasi kantor biasanya akan memperluas antarmuka untuk menambahkan fungsi baru atau benar kekurangan sebelumnya antara versi. Jika Anda perlu untuk otomatisasi aplikasi Office, dianjurkan bahwa Anda awal mengikat untuk versi awal dari produk yang Anda berharap dapat diinstal pada sistem klien Anda. Sebagai contoh, jika Anda perlu untuk dapat mengotomatisasi Excel 95, Excel 97, Excel 2000 dan Excel 2002, Anda harus menggunakan perpustakaan jenis untuk Excel 95 (XL5en32.olb) untuk menjaga kompatibilitas dengan semua tiga versi.

Aplikasi kantor juga menunjukkan bahwa objek model dengan antarmuka ganda yang besar dapat menderita keterbatasan dalam menyusun pada beberapa platform. Untuk kode bekerja terbaik di semua platform, menggunakan IDispatch. Untuk informasi lebih lanjut pada pemeliharaan kompatibilitas ketika bekerja dengan kantor aplikasi, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
247579Menggunakan DISPID mengikat untuk mengotomatisasi Office aplikasi bila memungkinkan

REFERENSI

Untuk informasi selengkapnya tentang COM, v-tabel, dan menggunakan Otomatisasi, silakan lihat buku-buku berikut:
Rogerson, Dale, Dalam COMMSPRESS, ISBN: 1-57231-349-8.

Curland, Matt, Lanjutan Visual Basic 6DevelopMentor, 0201707128.

Properti

ID Artikel: 245115 - Kajian Terakhir: 20 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbautomation kbinfo kbmt KB245115 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:245115

Berikan Masukan

 

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