Bagikan melalui


Metode IClassFactory::CreateInstance (unknwn.h)

Membuat objek yang tidak diinisialisasi.

Sintaks

HRESULT CreateInstance(
  [in]  IUnknown *pUnkOuter,
  [in]  REFIID   riid,
  [out] void     **ppvObject
);

Parameter

[in] pUnkOuter

Jika objek sedang dibuat sebagai bagian dari agregat, tentukan penunjuk ke antarmuka IUnknown pengontrol agregat. Jika tidak, parameter ini harus NULL.

[in] riid

Referensi ke pengidentifikasi antarmuka yang akan digunakan untuk berkomunikasi dengan objek yang baru dibuat. Jika pUnkOuterADALAH NULL, parameter ini umumnya adalah IID dari antarmuka inisialisasi; jika pUnkOuternon-NULL, riid harus IID_IUnknown.

[out] ppvObject

Alamat variabel pointer yang menerima pointer antarmuka yang diminta dalam riid. Setelah berhasil kembali, *ppvObject berisi penunjuk antarmuka yang diminta. Jika objek tidak mendukung antarmuka yang ditentukan dalam riid, implementasi harus mengatur *ppvObject ke NULL.

Menampilkan nilai

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

Menampilkan kode Deskripsi
S_OK
Objek yang ditentukan dibuat.
CLASS_E_NOAGGREGATION
Parameter pUnkOuter bukan NULL dan objek tidak mendukung agregasi.
E_NOINTERFACE
Objek yang dituju ppvObject tidak mendukung antarmuka yang diidentifikasi oleh riid.

Keterangan

Implementasi createInstance server COM harus mengembalikan referensi ke objek yang terkandung dalam apartemen milik pemecah masalah DCOM server. Ini tidak boleh mengembalikan referensi ke objek yang terkandung dalam apartemen jarak jauh.

Antarmuka IClassFactory selalu berada di objek kelas. Metode CreateInstance membuat objek yang tidak diinisialisasi dari kelas yang diidentifikasi dengan CLSID yang ditentukan. Ketika objek dibuat dengan cara ini, CLSID harus terdaftar di registri sistem dengan fungsi CoRegisterClassObject .

Parameter pUnkOuter menunjukkan apakah objek sedang dibuat sebagai bagian dari agregat. Definisi objek tidak diperlukan untuk mendukung agregasi - definisi harus dirancang dan diimplementasikan secara khusus untuk mendukungnya.

Parameter riid menentukan IID (pengidentifikasi antarmuka) antarmuka tempat Anda akan berkomunikasi dengan objek baru. Jika pUnkOuter bukan NULL (menunjukkan agregasi), nilai parameter riid harus IID_IUnknown. Jika objek bukan bagian dari agregat, riid sering menentukan antarmuka yang objeknya akan diinisialisasi.

Untuk penyematan OLE, antarmuka inisialisasinya adalah IPersistStorage, tetapi dalam situasi lain, antarmuka lain digunakan. Untuk menginisialisasi objek, harus ada panggilan berikutnya ke metode yang sesuai dalam antarmuka inisialisasi. Fungsi inisialisasi umum termasuk IPersistStorage::InitNew (untuk komponen baru yang dapat disematkan kosong), IPersistStorage::Load (untuk komponen yang dapat dimuat ulang), IPersistStream::Load, (untuk objek yang disimpan dalam objek stream) atau IPersistFile::Load (untuk objek yang disimpan dalam file).

Secara umum, jika aplikasi hanya mendukung satu kelas objek, dan objek kelas terdaftar untuk penggunaan tunggal, hanya satu objek yang dapat dibuat. Aplikasi tidak boleh membuat objek lain, dan permintaan untuk melakukannya harus mengembalikan kesalahan dari IClassFactory::CreateInstance. Hal yang sama berlaku untuk aplikasi yang mendukung beberapa kelas, masing-masing dengan objek kelas yang terdaftar untuk penggunaan tunggal; panggilan ke CreateInstance untuk satu kelas diikuti dengan panggilan ke CreateInstance untuk salah satu kelas yang harus mengembalikan kesalahan.

Untuk menghindari mengembalikan kesalahan, aplikasi yang mendukung beberapa kelas dengan objek kelas sekali pakai dapat mencabut objek kelas terdaftar dari kelas pertama dengan memanggil CoRevokeClassObject saat permintaan untuk membuat instans detik diterima. Misalnya, misalkan ada dua kelas, A dan B. Saat CreateInstance dipanggil untuk kelas A, cabut objek kelas untuk B. Saat B dibuat, cabut objek kelas untuk A. Solusi ini mempersulit pematian karena salah satu objek kelas mungkin telah dicabut (dan tidak dapat dicabut dua kali).

Persyaratan

   
Klien minimum yang didukung Windows 2000 Professional [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows 2000 Server [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header unknwn.h

Lihat juga

CoCreateInstance

CoGetClassObject

CoRegisterClassObject

CoRevokeClassObject

IClassFactory