Tentang Dynamic Data Exchange

Windows menyediakan beberapa metode untuk mentransfer data antar aplikasi. Salah satu metodenya adalah menggunakan protokol Dynamic Data Exchange (DDE). Protokol DDE adalah sekumpulan pesan dan panduan. Ini mengirim pesan antara aplikasi yang berbagi data dan menggunakan memori bersama untuk bertukar data antar aplikasi. Aplikasi dapat menggunakan protokol DDE untuk transfer data satu kali dan untuk pertukaran berkelanjutan di mana aplikasi mengirim pembaruan satu sama lain saat data baru tersedia.

Windows juga mendukung Dynamic Data Exchange Management Library (DDEML). DDEML adalah pustaka tautan dinamis (DLL) yang dapat digunakan aplikasi untuk berbagi data. DDEML menyediakan fungsi dan pesan yang menyederhanakan tugas menambahkan kemampuan DDE ke aplikasi. Alih-alih mengirim, memposting, dan memproses pesan DDE secara langsung, aplikasi menggunakan fungsi DDEML untuk mengelola percakapan DDE. (Percakapan DDE adalah interaksi antara aplikasi klien dan server.)

DDEML juga menyediakan fasilitas untuk mengelola string dan data yang dibagikan aplikasi DDE. Alih-alih menggunakan atom dan pointer ke objek memori bersama, aplikasi DDE membuat dan bertukar handel string, yang mengidentifikasi string, dan handel data, yang mengidentifikasi objek memori. DDEML juga memungkinkan aplikasi server untuk mendaftarkan nama layanan yang didukungnya. Nama-nama disiarkan ke aplikasi lain dalam sistem, yang dapat menggunakan nama untuk terhubung ke server. Selain itu, DDEML memastikan kompatibilitas di antara aplikasi DDE dengan memaksa mereka untuk menerapkan protokol DDE secara konsisten.

Aplikasi yang ada yang menggunakan protokol DDE berbasis pesan sepenuhnya kompatibel dengan aplikasi yang menggunakan DDEML. Artinya, aplikasi yang menggunakan DDE berbasis pesan dapat membuat percakapan dan melakukan transaksi dengan aplikasi yang menggunakan DDEML. Karena banyak keuntungan DDEML, aplikasi baru harus menggunakannya daripada pesan DDE. Untuk menggunakan elemen API DDEML, Anda harus menyertakan file header DDEML dalam file sumber Anda, menautkan dengan pustaka DDEML, dan memastikan bahwa pustaka tautan dinamis DDEML berada di jalur pencarian sistem.

Topik berikut dibahas di bagian ini.

Protokol Pertukaran Data Dinamis

Karena Windows memiliki arsitektur berbasis pesan, meneruskan pesan adalah metode yang paling tepat untuk mentransfer informasi antar aplikasi secara otomatis. Namun, pesan hanya berisi dua parameter (wParam dan lParam) untuk meneruskan data. Akibatnya, parameter ini harus merujuk secara tidak langsung ke bagian data lain ketika lebih dari beberapa kata informasi diteruskan di antara aplikasi. Protokol DDE mendefinisikan dengan tepat bagaimana aplikasi harus menggunakan parameter wParam dan lParam untuk meneruskan potongan data yang lebih besar dengan cara atom global dan handel memori bersama. Protokol DDE memiliki aturan khusus untuk mengalokasikan dan menghapus atom global dan objek memori bersama.

Atom global adalah referensi ke string karakter. Dalam protokol DDE, atom mengidentifikasi aplikasi yang bertukar data, sifat data yang dipertukarkan, dan item data itu sendiri. Untuk informasi selengkapnya tentang atom, lihat Tentang Atom.

Penggunaan untuk Windows Dynamic Data Exchange

DDE paling sesuai untuk pertukaran data yang tidak memerlukan interaksi pengguna yang sedang berlangsung. Biasanya, aplikasi menyediakan metode bagi pengguna untuk membuat tautan antara aplikasi yang bertukar data. Namun, setelah tautan tersebut dibuat, aplikasi bertukar data tanpa keterlibatan pengguna lebih lanjut.

DDE dapat digunakan untuk mengimplementasikan berbagai fitur aplikasi — misalnya:

  • Menautkan ke data real-time, seperti ke pembaruan pasar saham, instrumen ilmiah, atau kontrol proses.
  • Membuat dokumen gabungan, seperti dokumen pemrosesan kata yang menyertakan bagan yang dihasilkan oleh aplikasi grafis. Menggunakan DDE, bagan akan berubah saat data sumber diubah, sementara dokumen lainnya tetap sama.
  • Melakukan kueri data antar aplikasi, seperti spreadsheet yang mengkueri database untuk akun yang sudah lewat jatuh tempo.

Pertukaran Data Dinamis dari Sudut Pandang Pengguna

Contoh berikut menggambarkan bagaimana dua aplikasi DDE dapat bekerja sama, seperti yang terlihat dari sudut pandang pengguna.

Pengguna lembar bentang ingin menggunakan Microsoft Excel untuk melacak harga saham tertentu di New York Stock Exchange. Pengguna memiliki aplikasi bernama Quote yang pada gilirannya memiliki akses ke data NYSE. Percakapan DDE antara Excel dan Kutipan berlangsung sebagai berikut:

  • Pengguna memulai percakapan dengan memberikan nama aplikasi (Kuotasi) yang akan menyediakan data dan topik menarik tertentu (NYSE). Percakapan DDE yang dihasilkan digunakan untuk meminta kutipan pada saham tertentu.
  • Excel menyiarkan nama aplikasi dan topik ke semua aplikasi DDE yang saat ini berjalan dalam sistem. Kutipan merespons, membuat percakapan dengan Excel tentang topik NYSE.
  • Pengguna kemudian dapat membuat rumus spreadsheet di sel yang meminta agar spreadsheet diperbarui secara otomatis setiap kali kutipan stok tertentu berubah. Misalnya, pengguna dapat meminta pembaruan otomatis setiap kali perubahan terjadi dalam harga jual saham ZAXX dengan menentukan rumus Excel berikut: ='Kutipan'|' NYSE'! ZAXX
  • Pengguna dapat mengakhiri pembaruan otomatis kutipan saham ZAXX kapan saja. Tautan data lain yang dibuat secara terpisah (seperti untuk kutipan untuk saham lain) masih akan tetap aktif di bawah percakapan NYSE yang sama.
  • Pengguna juga dapat mengakhiri seluruh percakapan antara Excel dan Kutipan pada topik NYSE, sehingga tidak ada tautan data tertentu pada topik tersebut yang dapat dibuat tanpa memulai percakapan baru.

Konsep Pertukaran Data Dinamis

Bagian berikut menjelaskan konsep dan terminologi penting yang merupakan kunci untuk memahami pertukaran data dinamis.

Klien, Server, dan Percakapan

Dua aplikasi yang berpartisipasi dalam DDE dikatakan terlibat dalam percakapan DDE. Aplikasi yang memulai percakapan adalah aplikasi klien DDE; aplikasi yang merespons klien adalah aplikasi server DDE. Aplikasi dapat terlibat dalam beberapa percakapan secara bersamaan, bertindak sebagai klien di beberapa dan sebagai server di orang lain.

Percakapan DDE terjadi di antara dua jendela, satu untuk setiap aplikasi yang berpartisipasi. Jendela mungkin merupakan jendela utama aplikasi; jendela yang terkait dengan dokumen tertentu, seperti dalam aplikasi antarmuka beberapa dokumen (MDI) ; atau jendela tersembunyi (tidak terlihat) yang satu-satunya tujuannya adalah untuk memproses pesan DDE.

Karena percakapan DDE diidentifikasi oleh sepasang handel ke jendela yang terlibat dalam percakapan, tidak ada jendela yang harus terlibat dalam lebih dari satu percakapan dengan jendela lain. Aplikasi klien atau aplikasi server harus menyediakan jendela yang berbeda untuk setiap percakapannya dengan server atau aplikasi klien tertentu.

Aplikasi dapat memastikan sepasang jendela klien dan server tidak pernah terlibat dalam lebih dari satu percakapan dengan membuat jendela tersembunyi untuk setiap percakapan. Satu-satunya tujuan jendela ini adalah untuk memproses pesan DDE.

Nama Aplikasi, Topik, dan Item

Protokol DDE mengidentifikasi unit data yang diteruskan antara klien dan server dengan hierarki tiga tingkat nama aplikasi, topik, dan item.

Setiap percakapan DDE didefinisikan secara unik oleh nama dan topik aplikasi. Di awal percakapan DDE, klien dan server menentukan nama dan topik aplikasi. Nama aplikasi biasanya adalah nama aplikasi server. Misalnya, ketika Excel bertindak sebagai server dalam percakapan, nama aplikasinya adalah Excel.

Topik DDE adalah klasifikasi umum data di mana beberapa item data dapat "dibahas" (ditukar) selama percakapan. Untuk aplikasi yang beroperasi pada dokumen berbasis file, topik biasanya merupakan nama file. Untuk aplikasi lain, topik ini adalah nama khusus aplikasi.

Karena jendela klien dan server menangani bersama-sama mengidentifikasi percakapan DDE, nama aplikasi dan topik yang menentukan percakapan tidak dapat diubah selama percakapan.

Item data DDE adalah informasi yang terkait dengan topik percakapan yang dipertukarkan antara aplikasi. Nilai untuk item data dapat diteruskan dari server ke klien, atau dari klien ke server. Data dapat diteruskan dengan salah satu format clipboard standar atau dengan format clipboard terdaftar. Format khusus terdaftar bernama Link mengidentifikasi item dalam percakapan DDE. Untuk informasi selengkapnya tentang format clipboard, lihat Clipboard.

Topik Sistem

Aplikasi harus mendukung topik sistem setiap saat. Topik ini menyediakan konteks untuk informasi yang mungkin menarik bagi aplikasi lain.

Nilai item data harus dirender dalam format clipboard CF_TEXT. Elemen individual nilai item untuk topik sistem harus dibatasi oleh karakter tab. Tabel berikut menyarankan beberapa item untuk topik sistem.

Item Deskripsi
Format Daftar format clipboard yang dibatasi tab yang dapat dirender aplikasi. Biasanya, format CF_ tercantum dengan bagian "CF_" dari nama yang dihapus (misalnya, CF_TEXT terdaftar sebagai "TEXT").
Help Teks yang menjelaskan secara singkat cara menggunakan server DDE.
ReturnMessage Detail pendukung untuk pesan WM_DDE_ACK yang terakhir digunakan. Item ini berguna ketika diperlukan lebih dari delapan bit data pengembalian khusus aplikasi.
Status Indikasi status aplikasi saat ini. Ketika server menerima pesan WM_DDE_REQUEST untuk item topik sistem ini, server harus merespons dengan memposting pesan WM_DDE_DATA dengan string yang berisi Sibuk atau Siap, sebagaimana mestinya.
SysItems Daftar item topik sistem yang didukung aplikasi.
Daftar TopikItem Mirip dengan item SysItems, kecuali bahwa TopicItemList harus didukung untuk setiap topik selain topik sistem. Ini memungkinkan penjelajahan item yang didukung di bawah topik apa pun. Jika item tidak dapat dijumlahkan, item ini hanya boleh berisi "TopicItemList".
Topik Daftar topik yang didukung aplikasi saat ini; daftar ini dapat bervariasi dari saat ke saat.

 

Setelah percakapan DDE dimulai, klien dapat membuat satu atau beberapa tautan data permanen dengan server. Tautan data adalah mekanisme komunikasi yang dengannya server memberi tahu klien setiap kali nilai item data tertentu berubah. Tautan data bersifat permanen dalam arti proses pemberitahuan ini berlanjut hingga tautan data atau percakapan DDE itu sendiri dihentikan.

Ada dua jenis tautan data DDE permanen: hangat dan panas. Dalam tautan data hangat, server memberi tahu klien bahwa nilai item data telah berubah, tetapi server tidak mengirim nilai data ke klien sampai klien memintanya. Dalam tautan data panas, server segera mengirim nilai data yang diubah ke klien.

Aplikasi yang mendukung tautan data hangat atau panas biasanya menyediakan perintah Salin atau Tempel Tautan di menu Edit mereka untuk memungkinkan pengguna membuat tautan antar aplikasi.

Atom dan Objek Memori Bersama

Argumen tertentu dari pesan DDE adalah atom global atau objek memori bersama. Aplikasi yang menggunakan argumen ini harus mengikuti aturan eksplisit tentang kapan harus mengalokasikan dan menghapusnya. Dalam semua kasus, pengirim pesan harus menghapus objek atom atau memori bersama apa pun yang tidak akan diterima penerima yang dimaksudkan karena kondisi kesalahan, seperti kegagalan fungsi PostMessage.

DDE menggunakan objek memori bersama untuk tiga tujuan:

  • Untuk membawa nilai item data yang akan ditukar. Ini adalah item yang dirujuk oleh parameter hData dalam pesan WM_DDE_DATA dan WM_DDE_POKE.
  • Untuk membawa opsi dalam pesan. Ini adalah item yang dirujuk oleh parameter hOptions dalam pesan WM_DDE_ADVISE .
  • Untuk membawa string eksekusi perintah. Ini adalah item yang dirujuk oleh parameter hCommands dalam pesan WM_DDE_EXECUTE dan pesan WM_DDE_ACK yang sesuai.

Aplikasi yang menerima objek memori bersama DDE harus memperlakukannya sebagai baca saja. Aplikasi tidak boleh menggunakan objek sebagai area baca-tulis bersama untuk pertukaran data gratis.

Seperti halnya dengan atom DDE, aplikasi harus membebaskan objek memori bersama untuk mengelola memori secara efektif. Aplikasi juga harus mengunci dan membuka kunci objek memori.

Gambaran Umum Pesan Pertukaran Data Dinamis

Karena DDE adalah protokol berbasis pesan, DDE tidak menggunakan fungsi atau pustaka. Semua transaksi DDE dilakukan dengan meneruskan pesan DDE tertentu yang ditentukan antara klien dan jendela server.

Ada sembilan pesan DDE; konstanta simbolis untuk pesan ini didefinisikan dalam file header DDE. Struktur tertentu untuk berbagai pesan DDE juga didefinisikan dalam file header ini.

Tabel berikut ini meringkas pesan DDE.

Pesan Deskripsi
WM_DDE_ACK Mengakui menerima atau tidak menerima pesan.
WM_DDE_ADVISE Meminta aplikasi server untuk menyediakan pembaruan atau pemberitahuan untuk item data setiap kali berubah. Ini menetapkan tautan data permanen.
WM_DDE_DATA Mengirim nilai item data ke aplikasi klien.
WM_DDE_EXECUTE Mengirim string ke aplikasi server, yang diharapkan untuk memproses string sebagai serangkaian perintah.
WM_DDE_INITIATE Memulai percakapan antara aplikasi klien dan server.
WM_DDE_POKE Mengirim nilai item data ke aplikasi server.
WM_DDE_REQUEST Meminta aplikasi server untuk memberikan nilai item data.
WM_DDE_TERMINATE Mengakhiri percakapan.
WM_DDE_UNADVISE Mengakhiri tautan data permanen.

 

Aplikasi memanggil SendMessage untuk mengeluarkan pesan WM_DDE_INITIATE atau pesan WM_DDE_ACK yang dikirim sebagai respons terhadap WM_DDE_INITIATE. Semua pesan lain dikirim oleh PostMessage. Parameter pertama dari panggilan ini adalah handel ke jendela penerima; parameter kedua berisi pesan yang akan dikirim; parameter ketiga mengidentifikasi jendela pengirim; dan parameter keempat berisi argumen khusus pesan.

Alur Pesan Pertukaran Data Dinamis

Percakapan DDE umum terdiri dari peristiwa berikut:

  1. Aplikasi klien memulai percakapan, dan aplikasi server merespons.

  2. Aplikasi bertukar data dengan salah satu atau semua metode berikut:

      • Aplikasi server mengirim data ke klien atas permintaan klien.
      • Aplikasi klien mengirim data yang tidak diminta ke aplikasi server.
      • Aplikasi klien meminta aplikasi server untuk memberi tahu klien setiap kali item data berubah (tautan data hangat).
      • Aplikasi klien meminta aplikasi server untuk mengirim data setiap kali data berubah (tautan data panas).
      • Aplikasi server menjalankan perintah atas permintaan klien.
  3. Aplikasi klien atau server mengakhiri percakapan.

Jendela aplikasi yang memproses permintaan dari klien atau server harus memprosesnya secara ketat sesuai urutan penerimaannya.

Klien dapat membuat percakapan dengan lebih dari satu server; server dapat melakukan percakapan dengan lebih dari satu klien. Saat menangani pesan dari lebih dari satu sumber, klien atau server harus memproses pesan percakapan secara sinkron, tetapi tidak perlu memproses semua pesan secara sinkron. Dengan kata lain, itu dapat bergeser dari satu percakapan ke percakapan lain sesuai kebutuhan.

Jika aplikasi tidak dapat memproses permintaan masuk karena menunggu respons DDE, aplikasi harus mencegah kebuntuan dengan memposting pesan WM_DDE_ACK dengan anggota fBusy dari struktur DDEACK yang diatur ke 1. Aplikasi juga dapat mengirim pesan WM_DDE_ACK yang sibuk jika, karena alasan apa pun, aplikasi tidak dapat memproses permintaan masuk dalam waktu yang wajar.

Aplikasi harus dapat menangani kegagalan klien atau server untuk merespons pesan dalam waktu tertentu. Karena interval waktu habis dapat bervariasi tergantung pada sifat aplikasi dan konfigurasi sistem pengguna (termasuk apakah itu terhubung ke jaringan), aplikasi harus menyediakan cara bagi pengguna untuk menentukan interval.

Fungsi Pengemasan Parameter

Parameter lParam dari banyak pesan DDE berisi dua bagian data. Misalnya, lParam dari pesan WM_DDE_DATA berisi handel data dan atom. Aplikasi harus menggunakan fungsi PackDDElParam untuk mengemas handel dan atom ke dalam parameter lParam, dan fungsi UnpackDDElParam untuk menghapus nilai. Aplikasi DDE harus menggunakan PackDDElParam dan UnpackDDElParam untuk semua pesan yang diposting selama percakapan DDE.

Aplikasi juga dapat menggunakan fungsi ReuseDDElParam dan FreeDDElParam. ReuseDDElParam memungkinkan aplikasi DDE untuk menggunakan kembali parameter lParam yang dikemas, membantu mengurangi jumlah realokasi memori yang harus dilakukan aplikasi selama percakapan. Aplikasi dapat menggunakan FreeDDElParam untuk membebaskan memori yang terkait dengan handel data yang diterima selama percakapan DDE.

Pertukaran dan Peniruan Data Dinamis

Untuk mengizinkan server meniru klien, klien memanggil fungsi DdeSetQualityOfService. Struktur SECURITY_IMPERSONATION_LEVEL digunakan untuk mengontrol tingkat peniruan yang mungkin dilakukan server.

Server DDE dapat meniru klien DDE dengan memanggil fungsi ImpersonateDdeClientWindow. Server DDEML harus menggunakan fungsi DdeImpersonateClient.