Bagikan melalui


Fungsi DllGetClassObject (combaseapi.h)

Mengambil objek kelas dari handler objek DLL atau aplikasi objek.

OLE tidak menyediakan fungsi ini. DLL yang mendukung OLE Component Object Model (COM) harus mengimplementasikan DllGetClassObject di handler objek OLE atau aplikasi DLL.

Sintaks

HRESULT DllGetClassObject(
  [in]  REFCLSID rclsid,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

Parameter

[in] rclsid

CLSID yang akan mengaitkan data dan kode yang benar.

[in] riid

Referensi ke pengidentifikasi antarmuka yang digunakan pemanggil untuk berkomunikasi dengan objek kelas. Biasanya, ini IID_IClassFactory (didefinisikan dalam header OLE sebagai pengidentifikasi antarmuka untuk IClassFactory).

[out] ppv

Alamat variabel pointer yang menerima pointer antarmuka yang diminta dalam riid. Setelah berhasil dikembalikan, *ppv berisi penunjuk antarmuka yang diminta. Jika terjadi kesalahan, penunjuk antarmuka adalah NULL.

Nilai kembali

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

Menampilkan kode Deskripsi
S_OK
Objek berhasil diambil.
CLASS_E_CLASSNOTAVAILABLE
DLL tidak mendukung kelas (definisi objek).

Keterangan

Jika panggilan ke fungsi CoGetClassObject menemukan objek kelas yang akan dimuat dalam DLL, CoGetClassObject menggunakan fungsi DllGetClassObject yang diekspor DLL.

Catatan untuk Penelepon

Anda tidak boleh memanggil DllGetClassObject secara langsung. Ketika objek didefinisikan dalam DLL, CoGetClassObject memanggil fungsi CoLoadLibrary untuk memuat DLL, yang, pada gilirannya, memanggil DllGetClassObject.

Catatan untuk Pelaksana

Anda perlu menerapkan DllGetClassObject di (dan mengekspornya dari) DLL yang mendukung COM.

Contoh

Berikut ini adalah contoh (dalam C++) implementasi DllGetClassObject. Dalam contoh ini, DllGetClassObject membuat objek kelas dan memanggil metode QueryInterface-nya untuk mengambil pointer ke antarmuka yang diminta dalam riid. Implementasi merilis referensi yang dipegangnya ke antarmuka IClassFactory karena mengembalikan pointer yang dihitung referensi ke IClassFactory ke pemanggil.

HRESULT_export CALLBACK DllGetClassObject 
    (REFCLSID rclsid, REFIID riid, LPVOID * ppvObj) 
{ 
    HRESULT hr = E_OUTOFMEMORY; 
    *ppvObj = NULL; 
 
    CClassFactory *pClassFactory = new CClassFactory(rclsid); 
    if (pClassFactory != NULL)   { 
        hr = pClassFactory->QueryInterface(riid, ppvObj); 
        pClassFactory->Release(); 
    } 
    return hr;
} 

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 combaseapi.h (termasuk Objbase.h)

Lihat juga

CoGetClassObject

DllCanUnloadNow