Bagikan melalui


Kelas CComCoClass

Kelas ini menyediakan metode untuk membuat instans kelas, dan mendapatkan propertinya.

Sintaks

template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass

Parameter

T
Kelas Anda, berasal dari CComCoClass.

pclsid
Penunjuk ke CLSID objek.

Anggota

Metode Publik

Nama Deskripsi
CComCoClass::CreateInstance (Statis) Membuat instans kelas dan kueri untuk antarmuka.
CComCoClass::Error (Statis) Mengembalikan informasi kesalahan yang kaya kepada klien.
CComCoClass::GetObjectCLSID (Statis) Mengembalikan pengidentifikasi kelas objek.
CComCoClass::GetObjectDescription (Statis) Ambil alih untuk mengembalikan deskripsi objek.

Keterangan

CComCoClass menyediakan metode untuk mengambil CLSID objek, mengatur informasi kesalahan, dan membuat instans kelas. Setiap kelas yang terdaftar dalam peta objek harus berasal dari CComCoClass.

CComCoClass juga menentukan pabrik kelas default dan model agregasi untuk objek Anda. CComCoClass menggunakan dua makro berikut:

  • DECLARE_CLASSFACTORY Mendeklarasikan pabrik kelas menjadi CComClassFactory.

  • DECLARE_AGGREGATABLE Menyatakan bahwa objek Anda dapat diagregasi.

Anda dapat mengambil alih salah satu default ini dengan menentukan makro lain dalam definisi kelas Anda. Misalnya, untuk menggunakan CComClassFactory2 alih-alih CComClassFactory, tentukan makro DECLARE_CLASSFACTORY2:

class ATL_NO_VTABLE CMyClass2 :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyClass2, &CLSID_MyClass>,
   public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
   public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
   DECLARE_CLASSFACTORY2(CMyLicense)

   // Remainder of class declaration omitted

Persyaratan

Header: atlcom.h

CComCoClass::CreateInstance

Gunakan fungsi-fungsi ini CreateInstance untuk membuat instans objek COM dan mengambil penunjuk antarmuka tanpa menggunakan COM API.

template <class  Q>
static HRESULT CreateInstance( Q** pp);

template <class  Q>
static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp);

Parameter

Q
Antarmuka COM yang harus dikembalikan melalui pp.

punkOuter
[di] Bagian luar tidak diketahui atau mengontrol yang tidak diketahui dari agregat.

Pp
[out] Alamat variabel pointer yang menerima penunjuk antarmuka yang diminta jika pembuatan berhasil.

Tampilkan Nilai

Nilai HRESULT standar. Lihat CoCreateInstance di Windows SDK untuk deskripsi kemungkinan nilai yang dikembalikan.

Keterangan

Gunakan kelebihan beban pertama fungsi ini untuk pembuatan objek yang khas; gunakan kelebihan beban kedua saat Anda perlu mengagregasi objek yang sedang dibuat.

Kelas ATL yang mengimplementasikan objek COM yang diperlukan (yaitu, kelas yang digunakan sebagai parameter templat pertama ke CComCoClass) harus berada dalam proyek yang sama dengan kode panggilan. Pembuatan objek COM dilakukan oleh pabrik kelas yang terdaftar untuk kelas ATL ini.

Fungsi-fungsi ini berguna untuk membuat objek yang telah Anda cegah agar tidak dapat dikreat secara eksternal dengan menggunakan makro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO . Mereka juga berguna dalam situasi di mana Anda ingin menghindari COM API karena alasan efisiensi.

Perhatikan bahwa antarmuka Q harus memiliki IID yang terkait dengannya yang dapat diambil menggunakan operator __uuidof .

Contoh

Dalam contoh berikut, CDocument adalah kelas ATL yang dihasilkan wizard yang berasal dari CComCoClass yang mengimplementasikan IDocument antarmuka. Kelas terdaftar di peta objek dengan makro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO sehingga klien tidak dapat membuat instans dokumen menggunakan CoCreateInstance. CApplication adalah CoClass yang menyediakan metode pada salah satu antarmuka COM-nya sendiri untuk membuat instans kelas dokumen. Kode di bawah ini menunjukkan betapa mudahnya membuat instans kelas dokumen menggunakan anggota yang CreateInstance diwarisi dari CComCoClass kelas dasar.

STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
   *ppDoc = NULL;
   return CMyDoc::CreateInstance(ppDoc);
}

CComCoClass::Error

Fungsi statis ini menyiapkan IErrorInfo antarmuka untuk memberikan informasi kesalahan kepada klien.

static HRESULT WINAPI Error(
    LPCOLESTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCOLESTR lpszDesc,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCSTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCSTR lpszDesc,
    DWORD dwHelpID,
    LPCSTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    UINT nID,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance ());

static HRESULT Error(
    UINT nID,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());

Parameter

lpszDesc
[di] String yang menjelaskan kesalahan. Versi Unicode Error menentukan bahwa lpszDesc berjenis LPCOLESTR; versi ANSI menentukan jenis LPCSTR.

iid
[di] IID antarmuka yang menentukan kesalahan atau GUID_NULL (nilai default) jika kesalahan ditentukan oleh sistem operasi.

hRes
[di] HRESULT yang ingin Anda kembalikan ke pemanggil. Nilai default adalah 0. Untuk detail selengkapnya tentang hRes, lihat Komentar.

Nid
[di] Pengidentifikasi sumber daya tempat string deskripsi kesalahan disimpan. Nilai ini harus terletak antara 0x0200 dan 0xFFFF, secara inklusif. Dalam build debug, ASSERT akan menghasilkan jika nID tidak mengindeks string yang valid. Dalam build rilis, string deskripsi kesalahan akan diatur ke "Kesalahan Tidak Diketahui."

dwHelpID
[di] Pengidentifikasi konteks bantuan untuk kesalahan.

lpszHelpFile
[di] Jalur dan nama file bantuan yang menjelaskan kesalahan.

hInst
[di] Handel ke sumber daya. Secara default, parameter ini adalah _AtlModule::GetResourceInstance, di mana _AtlModule adalah instans global CAtlModule.

Tampilkan Nilai

Nilai HRESULT standar. Untuk detailnya, lihat Keterangan.

Keterangan

Untuk memanggil Error, objek Anda harus mengimplementasikan ISupportErrorInfo antarmuka.

Jika parameter hRes bukan nol, maka Error mengembalikan nilai hRes. Jika hRes adalah nol, maka empat versi Error pertama pengembalian DISP_E_EXCEPTION. Dua versi terakhir mengembalikan hasil makro MAKE_HRESULT( 1, FACILITY_ITF, nID ).

CComCoClass::GetObjectCLSID

Menyediakan cara yang konsisten untuk mengambil CLSID objek.

static const CLSID& WINAPI GetObjectCLSID();

Tampilkan Nilai

Pengidentifikasi kelas objek.

CComCoClass::GetObjectDescription

Fungsi statis ini mengambil deskripsi teks untuk objek kelas Anda.

static LPCTSTR WINAPI GetObjectDescription();

Tampilkan Nilai

Deskripsi objek kelas.

Keterangan

Implementasi default mengembalikan NULL. Anda dapat mengambil alih metode ini dengan makro DECLARE_OBJECT_DESCRIPTION . Contohnya:

class ATL_NO_VTABLE CMyDoc :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyDoc, &CLSID_MyDoc>,
   public IDocument
{
public:
   DECLARE_OBJECT_DESCRIPTION("My Document Object 1.0")

   // Remainder of class declaration omitted.

GetObjectDescription dipanggil oleh IComponentRegistrar::GetComponents. IComponentRegistrar adalah antarmuka Automation yang memungkinkan Anda mendaftar dan membatalkan pendaftaran komponen individual dalam DLL. Saat Anda membuat objek Pencatat Komponen dengan Wizard Proyek ATL, wizard akan secara otomatis mengimplementasikan IComponentRegistrar antarmuka. IComponentRegistrar biasanya digunakan oleh Microsoft Transaction Server.

Untuk informasi selengkapnya tentang Wizard Proyek ATL, lihat artikel Membuat Proyek ATL.

Lihat juga

Gambaran Umum Kelas