Bagikan melalui


Enumerasi REGCLS (combaseapi.h)

Mengontrol jenis koneksi ke objek kelas.

Sintaks

typedef enum tagREGCLS {
  REGCLS_SINGLEUSE = 0,
  REGCLS_MULTIPLEUSE = 1,
  REGCLS_MULTI_SEPARATE = 2,
  REGCLS_SUSPENDED = 4,
  REGCLS_SURROGATE = 8,
  REGCLS_AGILE = 0x10
} REGCLS;

Konstanta

 
REGCLS_SINGLEUSE
Nilai: 0
Setelah aplikasi terhubung ke objek kelas dengan CoGetClassObject, objek kelas dihapus dari tampilan publik sehingga tidak ada aplikasi lain yang dapat terhubung ke objek tersebut. Nilai ini biasanya digunakan untuk aplikasi antarmuka dokumen tunggal (SDI). Menentukan nilai ini tidak memengaruhi tanggung jawab aplikasi objek untuk memanggil CoRevokeClassObject; itu harus selalu memanggil CoRevokeClassObject ketika selesai dengan kelas objek.
REGCLS_MULTIPLEUSE
Nilai: 1
Beberapa aplikasi dapat terhubung ke objek kelas melalui panggilan ke CoGetClassObject. Jika REGCLS_MULTIPLEUSE dan CLSCTX_LOCAL_SERVER diatur dalam panggilan ke CoRegisterClassObject, objek kelas juga secara otomatis terdaftar sebagai server dalam proses, apakah CLSCTX_INPROC_SERVER diatur secara eksplisit.
REGCLS_MULTI_SEPARATE
Nilai: 2
Berguna untuk mendaftarkan CLSCTX_LOCAL_SERVER terpisah dan CLSCTX_INPROC_SERVER pabrik kelas melalui panggilan ke CoGetClassObject. Jika REGCLS_MULTI_SEPARATE diatur, setiap konteks eksekusi harus diatur secara terpisah; CoRegisterClassObject tidak secara otomatis mendaftarkan server di luar proses (yang CLSCTX_LOCAL_SERVER diatur) sebagai server dalam proses. Ini memungkinkan EXE untuk membuat beberapa instans objek untuk kebutuhan dalam proses, seperti penyematan sendiri, tanpa mengganggu pendaftaran CLSCTX_LOCAL_SERVER. Jika EXE mendaftarkan pabrik kelas REGCLS_MULTI_SEPARATE dan pabrik kelas CLSCTX_INPROC_SERVER, panggilan pembuatan instans yang menentukan CLSCTX_INPROC_SERVER dalam parameter CLSCTX yang dijalankan oleh EXE akan dipenuhi secara lokal tanpa mendekati SCM. Mekanisme ini berguna ketika EXE menggunakan fungsi seperti OleCreate dan OleLoad untuk membuat penyematan, tetapi pada saat yang sama tidak ingin meluncurkan instans baru itu sendiri untuk kasus penyematan sendiri. Perbedaan ini penting untuk penyematan karena handler default mengagregasi manajer proksi secara default dan aplikasi harus mengambil alih perilaku default ini dengan memanggil OleCreateEmbeddingHelper untuk kasus penyematan mandiri.

Jika aplikasi Anda tidak perlu membedakan antara kasus lokal dan inproc, Anda tidak perlu mendaftarkan pabrik kelas Anda menggunakan REGCLS_MULTI_SEPARATE. Bahkan, aplikasi ini menimbulkan perjalanan pulang pergi jaringan tambahan ke SCM ketika mendaftarkan pabrik kelas MULTIPLEUSE-nya sebagai MULTI_SEPARATE dan tidak mendaftarkan pabrik kelas lain seperti INPROC_SERVER.
REGCLS_SUSPENDED
Nilai: 4
Menangguhkan permintaan pendaftaran dan aktivasi untuk CLSID yang ditentukan hingga ada panggilan ke CoResumeClassObjects. Ini biasanya digunakan untuk mendaftarkan CLSID untuk server yang dapat mendaftarkan beberapa objek kelas untuk mengurangi waktu pendaftaran keseluruhan, dan dengan demikian waktu mulai aplikasi server, dengan melakukan satu panggilan ke SCM, tidak peduli berapa banyak CLSID yang terdaftar untuk server.

Catatan Bendera ini mencegah kesalahan aktivasi COM dari kemungkinan kondisi balapan antara aplikasi yang dimatikan dan aplikasi tersebut mencoba mendaftarkan kelas COM.

 
REGCLS_SURROGATE
Nilai: 8
Objek kelas adalah proses pengganti yang digunakan untuk menjalankan server DLL. Pabrik kelas yang terdaftar oleh proses pengganti bukanlah pabrik kelas aktual yang diterapkan oleh server DLL, tetapi pabrik kelas generik yang diterapkan oleh pengganti. Pabrik kelas generik ini mendelegasikan pembuatan instans dan marshaling ke pabrik kelas server DLL yang berjalan di pengganti. Untuk informasi lebih lanjut tentang pengganti DLL, lihat nilai registri DllSurrogate .
REGCLS_AGILE
Nilai: 0x10
Objek kelas menggabungkan marshaler berulir bebas
dan akan dibuat terlihat oleh semua apartemen inproc. Dapat digunakan bersama dengan bendera lain. Misalnya, REGCLS_AGILE
REGCLS_MULTIPLEUSE untuk mendaftarkan
objek kelas yang dapat digunakan beberapa kali dari
apartemen yang berbeda. Tanpa bendera lain, perilaku
akan mempertahankan semantik REGCLS_SINGLEUSE hanya
satu instans dapat dihasilkan.

Keterangan

Di CoRegisterClassObject, anggota REGCLS dan enumerasi CLSCTX , yang diambil bersama-sama, menentukan bagaimana objek kelas terdaftar.

Pengganti EXE (tempat server DLL dijalankan) memanggil CoRegisterClassObject untuk mendaftarkan pabrik kelas menggunakan nilai REGCLS baru, REGCLS_SURROGATE.

Semua pabrik kelas untuk pengganti DLL harus didaftarkan dengan set REGCLS_SURROGATE. Jangan atur REGCLS_SINGLUSE atau REGCLS_MULTIPLEUSE saat Anda mendaftarkan pengganti untuk server DLL.

Tabel berikut ini meringkas kombinasi nilai REGCLS yang diizinkan dan pendaftaran objek yang terpengaruh oleh kombinasi.

REGCLS_SINGLEUSE REGCLS_MULTIPLEUSE REGCLS_MULTI_SEPARATE Lainnya
CLSCTX_INPROC_SERVER Kesalahan Dalam proses Dalam proses Kesalahan
CLSCTX_LOCAL_SERVER Lokal Dalam proses/lokal Lokal Kesalahan
Keduanya di atas Kesalahan Dalam proses/lokal Dalam proses/lokal Kesalahan
Lainnya Kesalahan Kesalahan Kesalahan Kesalahan

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Header combaseapi.h (termasuk Objbase.h)

Lihat juga

CoGetClassObject

CoRegisterClassObject

DllGetClassObject

DllSurrogate