Lihat Penembolokan

Aplikasi kontainer harus dapat memperoleh presentasi objek untuk tujuan menampilkan atau mencetaknya untuk pengguna saat dokumen terbuka tetapi aplikasi server objek tidak berjalan atau tidak diinstal pada komputer pengguna. Namun, untuk mengasumsikan bahwa server untuk semua objek yang mungkin ditemukan dalam dokumen diinstal pada setiap komputer pengguna dan selalu dapat berjalan sesuai permintaan tidak realistis. Handler objek default, yang tersedia setiap saat, memecahkan dilema ini dengan membuat cache presentasi objek di penyimpanan dokumen dan memanipulasi presentasi ini pada platform apa pun terlepas dari ketersediaan server objek pada instalasi kontainer tertentu.

Kontainer dapat mempertahankan presentasi gambar untuk satu atau beberapa perangkat target tertentu selain yang diperlukan untuk mempertahankan objek di layar. Selain itu, jika Anda memindahkan objek dari satu platform ke platform lain, OLE secara otomatis mengonversi format data objek menjadi yang didukung pada platform baru. Misalnya, jika Anda memindahkan objek dari Windows ke Macintosh, OLE akan mengonversi presentasi metafilenya ke format PICT.

Untuk menyajikan representasi yang akurat dari objek yang disematkan kepada pengguna, aplikasi kontainer objek memulai dialog dengan handler objek, meminta data dan instruksi menggambar. Agar dapat memenuhi permintaan kontainer, handler harus mengimplementasikan antarmuka IDataObject, IViewObject2, dan IOleCache.

IDataObject memungkinkan aplikasi kontainer OLE untuk mendapatkan data dari dan mengirim data ke objek yang disematkan atau ditautkan. Ketika data berubah dalam objek, antarmuka ini menyediakan cara bagi objek untuk membuat data barunya tersedia untuk kontainernya dan menyediakan kontainer dengan cara untuk memperbarui data dalam salinan objeknya. (Untuk diskusi transfer data secara umum, lihat Bab 4, Transfer Data.)

Antarmuka IViewObject2 sangat mirip dengan antarmuka IDataObject kecuali bahwa ia meminta objek untuk menggambar dirinya sendiri pada konteks perangkat, seperti layar, printer, atau metafile, daripada memindahkan atau menyalin datanya ke memori atau beberapa media transfer lainnya. Tujuan antarmuka adalah untuk mengaktifkan kontainer OLE untuk mendapatkan representasi gambar alternatif dari objek yang disematkan, yang datanya sudah dimiliki, sehingga menghindari overhead harus mentransfer instans yang sama sekali baru dari objek data yang sama hanya untuk mendapatkan instruksi menggambar baru. Sebaliknya, antarmuka IViewObject2memungkinkan kontainer untuk meminta objek untuk memberikan representasi gambar dirinya sendiri dengan menggambar pada konteks perangkat yang ditentukan oleh kontainer.

Saat memanggil antarmuka IViewObject2 , aplikasi kontainer juga dapat menentukan bahwa objek menggambar sendiri pada perangkat target yang berbeda dari yang sebenarnya akan dirender. Ini memungkinkan kontainer, sesuai kebutuhan, untuk menghasilkan penyajian yang berbeda dari satu objek. Misalnya, pemanggil dapat meminta objek untuk menyusun dirinya sendiri untuk printer meskipun gambar yang dihasilkan akan dirender di layar. Hasilnya, tentu saja, akan menjadi pratinjau cetak objek.

Antarmuka IViewObject2juga menyediakan metode yang memungkinkan kontainer mendaftar untuk pemberitahuan perubahan tampilan. Seperti halnya saran data dan OLE, koneksi penasihat tampilan memungkinkan kontainer untuk memperbarui penyajian objeknya pada kenyamanannya sendiri daripada menanggapi panggilan dari objek. Misalnya, jika versi baru aplikasi server objek menawarkan tampilan tambahan dari data yang sama, handler default objek akan memanggil implementasi setiap kontainer dari IAdviseSink::OnViewChange untuk memberi tahu mereka bahwa presentasi baru tersedia. Kontainer akan mengambil informasi ini dari sink saran hanya jika diperlukan.

Karena konteks perangkat Windows hanya memiliki arti dalam satu proses, Anda tidak dapat melewati pointer IViewObject2 di seluruh batas proses. Akibatnya, server lokal dan jarak jauh OLE tidak memerlukan apa pun untuk mengimplementasikan antarmuka, yang tidak akan berfungsi dengan baik bahkan jika mereka melakukannya. Hanya handler objek dan server dalam proses yang mengimplementasikan antarmuka IViewObject2. OLE menyediakan implementasi default, yang dapat Anda gunakan di server dalam proses OLE dan penanganan objek Anda sendiri hanya dengan menggabungkan handler default OLE. Atau Anda dapat menulis implementasi IViewObject2 Anda sendiri.

Objek mengimplementasikan antarmuka IOleCache untuk memberi tahu handler kemampuan apa yang harus di-cache. Handler objek juga memiliki cache dan memastikannya selalu diperbarui. Saat objek yang disematkan memasuki status berjalan, handler menyiapkan koneksi penasihat yang sesuai pada objek server, dengan sendirinya bertindak sebagai sink. Implementasi antarmuka IDataObject dan IViewObject2beroperasi dari data yang di-cache di sisi klien. Implementasi handler IViewObject2 bertanggung jawab untuk menentukan format data apa yang akan di-cache untuk memenuhi permintaan gambar klien. Implementasi handler IDataObject bertanggung jawab untuk mendapatkan data dalam berbagai format, dll., antara memori dan instans IStorage yang mendasar dari objek yang disematkan. Handler kustom dapat menggunakan implementasi ini dengan mengagregasi pada handler default.

Catatan

Antarmuka IViewObject2 adalah ekstensi fungsional sederhana dari IViewObject dan harus diimplementasikan alih-alih antarmuka terakhir, yang sekarang usang. Selain menyediakan metode IViewObject, antarmuka IViewObject2 menyediakan satu anggota tambahan, GetExtent, yang memungkinkan aplikasi kontainer untuk mendapatkan ukuran presentasi objek dari cache tanpa harus terlebih dahulu memindahkan objek ke status berjalan dengan panggilan ke IOleObject::GetExtent.

 

Dokumen Gabungan