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) |