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.