Bagikan melalui


Metode IMoniker::BindToStorage (objidl.h)

Mengikat ke penyimpanan untuk objek yang ditentukan. Tidak seperti metode IMoniker::BindToObject , metode ini tidak mengaktifkan objek yang diidentifikasi oleh moniker.

Sintaks

HRESULT BindToStorage(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [in]  REFIID   riid,
  [out] void     **ppvObj
);

Parameter

[in] pbc

Penunjuk ke antarmuka IBindCtx pada objek konteks ikatan, yang digunakan dalam operasi pengikatan ini. Konteks ikatan menyimpan objek yang terikat selama proses pengikatan, berisi parameter yang berlaku untuk semua operasi menggunakan konteks ikatan, dan menyediakan sarana di mana implementasi moniker harus mengambil informasi tentang lingkungannya.

[in] pmkToLeft

Jika moniker adalah bagian dari moniker komposit, arahkan ke moniker di sebelah kiri moniker ini. Parameter ini terutama digunakan oleh pelaksana moniker untuk memungkinkan kerja sama antara berbagai komponen moniker komposit. Klien Moniker harus menggunakan NULL.

[in] riid

Referensi ke pengidentifikasi antarmuka penyimpanan yang diminta, yang penunjuknya akan dikembalikan dalam ppvObj. Antarmuka penyimpanan yang umum diminta termasuk IStorage, IStream, dan ILockBytes.

[out] ppvObj

Alamat variabel pointer yang menerima pointer antarmuka yang diminta dalam riid. Setelah berhasil dikembalikan, *ppvObj berisi penunjuk antarmuka yang diminta ke penyimpanan objek yang diidentifikasi moniker. Jika berhasil, implementasi harus memanggil AddRef pada penyimpanan. Pemanggil bertanggung jawab untuk memanggil Rilis. Jika terjadi kesalahan, *ppvObj harus NULL.

Nilai kembali

Metode ini dapat mengembalikan nilai pengembalian standar E_UNEXPECTED, serta nilai berikut.

Menampilkan kode Deskripsi
S_OK
Operasi pengikatan berhasil.
MK_E_NOSTORAGE
Objek yang diidentifikasi oleh moniker ini tidak memiliki penyimpanannya sendiri.
MK_E_EXCEEDEDDEADLINE
Operasi pengikatan tidak dapat diselesaikan dalam batas waktu yang ditentukan oleh struktur BIND_OPTS konteks ikat.
MK_E_CONNECTMANUALLY
Operasi tidak dapat tersambung ke penyimpanan, mungkin karena perangkat jaringan tidak dapat disambungkan. Untuk informasi selengkapnya, lihat IMoniker::BindToObject.
MK_E_INTERMEDIATEINTERFACENOTSUPPORTED
Objek perantara ditemukan tetapi tidak mendukung antarmuka yang diperlukan untuk menyelesaikan operasi pengikatan. Misalnya, moniker item mengembalikan nilai ini jika kontainernya tidak mendukung antarmuka IOleItemContainer .
STG_E_ACCESSDENIED
Tidak dapat mengakses objek penyimpanan.
 

Metode ini juga dapat mengembalikan kesalahan yang terkait dengan metode IOleItemContainer::GetObject .

Keterangan

Ada perbedaan penting antara metode BindToObject dan BindToStorage . Jika, misalnya, Anda memiliki moniker yang mengidentifikasi objek spreadsheet, memanggil BindToObject menyediakan akses ke objek spreadsheet itu sendiri, sambil memanggil BindToStorage menyediakan akses ke objek penyimpanan tempat spreadsheet berada.

Catatan untuk Penelepon

Meskipun tidak ada kelas moniker COM yang memanggil metode ini dalam operasi pengikatan mereka, mungkin tepat untuk menyebutnya dalam implementasi kelas moniker baru. Anda dapat memanggil metode ini dalam implementasi BindToObject yang memerlukan informasi dari objek yang diidentifikasi oleh parameter pmkToLeft dan bisa mendapatkannya dari penyimpanan persisten objek tanpa aktivasi. Misalnya, jika moniker Anda digunakan untuk mengidentifikasi objek yang dapat diaktifkan tanpa mengaktifkan kontainernya, Anda mungkin merasa metode ini berguna.

Klien yang dapat membaca penyimpanan objek yang diidentifikasi monikernya juga dapat memanggil metode ini.

Catatan untuk Pelaksana

Implementasi Anda harus menemukan penyimpanan persisten untuk objek yang diidentifikasi oleh moniker saat ini dan mengembalikan penunjuk antarmuka yang diinginkan. Beberapa jenis moniker mewakili objek pseudo, yang merupakan objek yang tidak memiliki penyimpanan persisten mereka sendiri. Objek tersebut terdiri dari beberapa bagian dari status internal kontainernya, misalnya, rentang sel dalam spreadsheet. Jika kelas moniker Anda mengidentifikasi jenis objek ini, implementasi BindToStorage Anda harus mengembalikan kesalahan MK_E_NOSTORAGE.

Jika struktur BIND_OPTS konteks ikat menentukan bendera BINDFLAGS_JUSTTESTEXISTENCE, implementasi Anda memiliki opsi untuk mengembalikan NULL di ppvObj (meskipun Anda juga dapat mengabaikan bendera dan melakukan operasi pengikatan lengkap).

Catatan khusus implementasi

Implementasi Catatan
Anti-moniker Metode ini mengembalikan E_NOTIMPL.
Moniker kelas Metode ini diteruskan ke BindToObject kelas moniker.
Moniker file Metode ini membuka file yang ditentukan oleh jalur yang diwakili oleh moniker dan mengembalikan penunjuk IStorage ke file tersebut. Metode ini hanya mendukung pengikatan ke antarmuka IStorage ; jika IStream atau ILockBytes diminta dalam riid, metode mengembalikan E_UNSPEC, dan jika antarmuka lain diminta, metode ini mengembalikan E_NOINTERFACE. Kecuali pmkToLeft adalah moniker kelas, pmkToLeft harus NULL, seperti dalam implementasi IMoniker::BindToObject.
Moniker komposit generik Metode ini secara rekursif memanggil BindToStorage pada komponen paling kanan komposit, meneruskan sisa komposit sebagai parameter pmkToLeft untuk panggilan tersebut.
Moniker item Jika pmkToLeftADALAH NULL, metode ini mengembalikan E_INVALIDARG. Jika tidak, metode memanggil IMoniker::BindToObject pada parameter pmkToLeft , meminta penunjuk antarmuka IOleItemContainer . Metode ini kemudian memanggil IOleItemContainer::GetObjectStorage untuk antarmuka yang diminta.
Moniker OBJREF Metode ini mendapatkan pointer marshaled ke antarmuka yang diminta pada penyimpanan yang berisi objek yang sedang berjalan. Karena moniker OBJREF mewakili objek yang sedang berjalan, tidak ada aktivasi yang terjadi. Jika objek yang diwakili tidak lagi berjalan, BindToStorage gagal dengan E_UNEXPECTED.
Penunjuk moniker Metode ini mengkueri penunjuk yang dibungkus untuk antarmuka yang diminta.
Moniker URL Implementasi sistem moniker URL mendukung BindToStorage untuk objek stream pada semua URL dan untuk objek penyimpanan dalam kasus di mana sumber daya yang ditunjuk adalah file majemuk.

Karena moniker URL mendukung pengikatan asinkron, nilai pengembalian aktual dari BindToStorage-nya dapat bervariasi tergantung pada parameter objek yang ditetapkan dalam konteks ikatan. Namun, semantik operasi ikatan identik terlepas dari penggunaan sinkron atau asinkron, sebagai berikut:

  • Moniker URL menarik informasi lebih lanjut untuk operasi pengikatan dari konteks ikatan. Misalnya, moniker dapat memperoleh pointer ke antarmuka IBindStatusCallback dan IEnumFORMATETC yang terdaftar dalam konteks ikat. Informasi lebih lanjut dapat mencakup opsi ikatan tambahan yang ditentukan pada konteks ikat melalui IBindCtx::SetBindOptions, seperti parameter dwTickCountDeadline atau nilai grfFlags BIND_MAYBOTHERUSER. Moniker kemudian meminta klien dengan memanggil IBindStatusCallback::GetBindInfo dan memulai operasi pengikatan dengan transportasi dan meneruskan IBinding yang dihasilkan ke klien dengan memanggil IBindStatusCallback::OnStartBinding.
  • Jika pemanggil meminta IStream asinkron atau IStorage dengan menentukan bendera BINDF_ASYNCSTORAGE dalam struktur BINDINFO yang diambil dari IBindStatusCallback::GetBindInfo, metode MONIKER URL mengembalikan objek sesegera mungkin. Panggilan ke objek IStorage atau IStream ini yang mereferensikan data yang belum tersedia mengembalikan E_PENDING.
  • Jika pemanggil tidak menentukan IStream asinkron atau IStorage seperti yang dijelaskan di atas, moniker URL akan tetap mengembalikan objek melalui metode IBindStatusCallback::OnDataAvailable sesegera mungkin. Namun, panggilan ke objek ini yang mereferensikan data yang belum tersedia akan memblokir hingga data tersedia. Untuk beberapa aplikasi, ini akan memerlukan modifikasi paling sedikit dari kode I/O yang ada mungkin masih mengakibatkan peningkatan performa tergantung pada pola aksesnya.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header objidl.h

Lihat juga

IMoniker