Bagikan melalui


IRunningObjectTable::Metode register (objidl.h)

Mendaftarkan objek dan mengidentifikasi moniker dalam tabel objek yang sedang berjalan (ROT).

Sintaks

HRESULT Register(
  [in]  DWORD    grfFlags,
  [in]  IUnknown *punkObject,
  [in]  IMoniker *pmkObjectName,
  [out] DWORD    *pdwRegister
);

Parameter

[in] grfFlags

Menentukan apakah referensi ROT ke punkObject lemah atau kuat dan mengontrol akses ke objek melalui entrinya di ROT. Untuk detailnya, lihat bagian Keterangan.

Nilai Makna
ROTFLAGS_REGISTRATIONKEEPSALIVE
Ketika diatur, menunjukkan pendaftaran yang kuat untuk objek .
ROTFLAGS_ALLOWANYCLIENT
Ketika diatur, klien apa pun dapat terhubung ke objek yang sedang berjalan melalui entrinya di ROT. Ketika tidak diatur, hanya klien di stasiun jendela yang mendaftarkan objek yang dapat terhubung ke dalamnya.

[in] punkObject

Penunjuk ke objek yang sedang didaftarkan sebagai berjalan.

[in] pmkObjectName

Penunjuk ke moniker yang mengidentifikasi punkObject.

[out] pdwRegister

Pengidentifikasi untuk entri ROT ini yang dapat digunakan dalam panggilan berikutnya ke IRunningObjectTable::Revoke atau IRunningObjectTable::NoteChangeTime. Pemanggil tidak dapat menentukan NULL untuk parameter ini. Jika terjadi kesalahan, *pdwRegister diatur ke nol.

Nilai kembali

Metode ini dapat mengembalikan nilai pengembalian standar E_INVALIDARG dan E_OUTOFMEMORY, serta nilai berikut.

Menampilkan kode Deskripsi
S_OK
Metode berhasil diselesaikan.
MK_S_MONIKERALREADYREGISTERED
Pasangan moniker/objek berhasil didaftarkan, tetapi objek lain (mungkin objek yang sama) telah terdaftar dengan moniker yang sama.

Keterangan

Metode ini mendaftarkan pointer ke objek di bawah moniker yang mengidentifikasi objek . Moniker digunakan sebagai kunci saat tabel dicari dengan IRunningObjectTable::GetObject.

Ketika objek didaftarkan, ROT selalu memanggil AddRef pada objek . Untuk pendaftaran yang lemah (ROTFLAGS_REGISTRATIONKEEPSALIVE tidak diatur), ROT akan merilis objek setiap kali referensi kuat terakhir ke objek dirilis. Untuk pendaftaran yang kuat (ROTFLAGS_REGISTRATIONKEEPSALIVE diatur), ROT mencegah objek dihancurkan sampai pendaftaran objek dicabut secara eksplisit.

Server yang terdaftar sebagai LocalService atau RunAs dapat mengatur bendera ROTFLAGS_ALLOWANYCLIENT dalam panggilannya ke Daftar untuk memungkinkan klien mana pun terhubung ke server tersebut. Pengaturan server bit ini harus memiliki nama yang dapat dieksekusi di bagian AppID dari registri yang mengacu pada AppID untuk yang dapat dieksekusi. Server "aktifkan sebagai pengaktif" (tidak terdaftar sebagai LocalService atau RunAs) tidak boleh mengatur bendera ini dalam panggilannya ke Daftar. Untuk detail tentang menginstal layanan, lihat Menginstal sebagai Aplikasi Layanan.

Mendaftarkan objek kedua dengan moniker yang sama, atau mendaftarkan ulang objek yang sama dengan moniker yang sama, membuat entri kedua di ROT. Dalam hal ini, Register mengembalikan MK_S_MONIKERALREADYREGISTERED. Setiap panggilan ke Register harus dicocokkan dengan panggilan ke IRunningObjectTable::Revoke karena bahkan entri duplikat memiliki pengidentifikasi pdwRegister yang berbeda. Masalah dengan pendaftaran duplikat adalah bahwa tidak ada cara untuk menentukan objek mana yang akan dikembalikan jika moniker ditentukan dalam panggilan berikutnya ke IRunningObjectTable::IsRunning.

Catatan untuk Penelepon

Jika Anda adalah penyedia moniker (yaitu, Anda membagikan moniker yang mengidentifikasi objek Anda untuk membuatnya dapat diakses oleh orang lain), Anda harus memanggil metode Daftar untuk mendaftarkan objek Anda ketika mereka mulai berjalan. Anda juga harus memanggil metode ini jika Anda mengganti nama objek saat dimuat.

Jenis penyedia moniker yang paling umum adalah sumber tautan dokumen majemuk. Ini termasuk aplikasi server yang mendukung penautan ke dokumen mereka (atau bagian dari dokumen) dan aplikasi kontainer yang mendukung penautan ke penyematan dalam dokumen mereka. Aplikasi server yang tidak mendukung penautan juga dapat menggunakan ROT untuk bekerja sama dengan aplikasi kontainer yang mendukung penautan ke penyematan.

Jika Anda menulis aplikasi server, Anda harus mendaftarkan objek dengan ROT ketika mulai berjalan, biasanya dalam implementasi IOleObject::D oVerb Anda. Objek harus didaftarkan di bawah moniker penuhnya, yang mengharuskan mendapatkan moniker dokumen kontainernya menggunakan IOleClientSite::GetMoniker. Anda juga harus mencabut dan mendaftarkan ulang objek dalam implementasi IOleObject::SetMoniker, yang dipanggil jika dokumen kontainer diganti namanya.

Jika Anda menulis aplikasi kontainer yang mendukung penautan ke penyematan, Anda harus mendaftarkan dokumen Anda dengan ROT saat dimuat. Jika dokumen Anda diganti namanya, Anda harus mencabut dan mendaftarkannya kembali dengan ROT dan memanggil IOleObject::SetMoniker untuk setiap objek yang disematkan dalam dokumen untuk memberi mereka kesempatan untuk mendaftarkan kembali diri mereka sendiri.

Objek yang terdaftar di ROT harus dicabut secara eksplisit ketika objek tidak lagi berjalan atau ketika monikernya berubah. Pencabutan ini penting karena tidak ada cara bagi sistem untuk secara otomatis menghapus entri dari ROT. Anda harus menyimpan cache pengidentifikasi yang ditulis melalui pdwRegister dan menggunakannya dalam panggilan ke IRunningObjectTable::Revoke untuk mencabut pendaftaran. Untuk pendaftaran yang kuat, referensi yang kuat dirilis ketika pendaftaran objek dicabut.

Pada Windows Server 2003, jika ada entri kedaluwarsa yang tetap berada di ROT karena masalah server yang tidak terduga, COM akan secara otomatis menghapus entri kedaluwarsa ini dari ROT.

Implementasi sistem Register memanggil IMoniker::Reduce pada parameter pmkObjectName untuk memastikan bahwa moniker sepenuhnya berkurang sebelum pendaftaran. Jika objek diketahui oleh lebih dari satu moniker yang berkurang sepenuhnya, objek harus terdaftar di bawah semua moniker tersebut.

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

IRunningObjectTable