Aracılığıyla paylaş


CComCoClass Sınıfı

Bu sınıf, bir sınıfın örneklerini oluşturmak ve özelliklerini almak için yöntemler sağlar.

Sözdizimi

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

Parametreler

T
sınıfından CComCoClasstüretilen sınıfınız.

pclsid
Nesnenin CLSID işaretçisi.

Üyeler

Genel Yöntemler

Veri Akışı Adı Açıklama
CComCoClass::CreateInstance (Statik) Sınıfın bir örneğini oluşturur ve bir arabirim için sorgular.
CComCoClass::Error (Statik) İstemciye zengin hata bilgileri döndürür.
CComCoClass::GetObjectCLSID (Statik) Nesnenin sınıf tanımlayıcısını döndürür.
CComCoClass::GetObjectDescription (Statik) Nesnenin açıklamasını döndürmek için geçersiz kılın.

Açıklamalar

CComCoClass bir nesnenin CLSID'sini almak, hata bilgilerini ayarlamak ve sınıfın örneklerini oluşturmak için yöntemler sağlar. Nesne eşlemesine kayıtlı tüm sınıflar öğesinden CComCoClasstüretilmelidir.

CComCoClass ayrıca nesneniz için varsayılan sınıf fabrikasını ve toplama modelini tanımlar. CComCoClass aşağıdaki iki makroyu kullanır:

  • DECLARE_CLASSFACTORY Sınıf fabrikasını CComClassFactory olarak bildirir.

  • DECLARE_AGGREGATABLE Nesnenizin toplanabilir olduğunu bildirir.

Sınıf tanımınızda başka bir makro belirterek bu varsayılan değerlerden birini geçersiz kılabilirsiniz. Örneğin, yerine CComClassFactoryCComClassFactory2 kullanmak için DECLARE_CLASSFACTORY2 makroyu belirtin:

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

Gereksinimler

Üst bilgi: atlcom.h

CComCoClass::CreateInstance

COM nesnesinin bir örneğini oluşturmak ve COM API'sini kullanmadan arabirim işaretçisi almak için bu CreateInstance işlevleri kullanın.

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

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

Parametreler

Q
pp aracılığıyla döndürülmesi gereken COM arabirimi.

punkOuter
[in] Dış bilinmeyen veya toplamanın bilinmeyenini denetleme.

Pp
[out] Oluşturma başarılı olursa istenen arabirim işaretçisini alan işaretçi değişkeninin adresi.

Dönüş Değeri

Standart bir HRESULT değeri. Olası dönüş değerlerinin açıklaması için bkz . Windows SDK'sında CoCreateInstance .

Açıklamalar

Tipik nesne oluşturmak için bu işlevin ilk aşırı yüklemesini kullanın; oluşturulan nesneyi toplamanız gerektiğinde ikinci aşırı yüklemeyi kullanın.

Gerekli COM nesnesini uygulayan ATL sınıfı (CComCoClass için ilk şablon parametresi olarak kullanılan sınıf), çağıran kodla aynı projede olmalıdır. COM nesnesinin oluşturulması, bu ATL sınıfı için kayıtlı sınıf fabrikası tarafından gerçekleştirilir.

Bu işlevler, OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO makroyu kullanarak dışarıdan oluşturulabilen nesneler oluşturmak için kullanışlıdır. Ayrıca, verimlilik nedeniyle COM API'sini kullanmak istemediğiniz durumlarda da kullanışlıdır.

Q arabiriminin kendisiyle ilişkilendirilmiş ve __uuidof işleci kullanılarak alınabilen bir IID'ye sahip olması gerektiğini unutmayın.

Örnek

Aşağıdaki örnekte, CDocument arabirimini uygulayan, sihirbaz tarafından oluşturulan ve türetilmiş CComCoClass bir ATL sınıfıdır IDocument . sınıfı nesne eşlemesine OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO makroyla kaydedilir, böylece istemciler CoCreateInstance kullanarak belgenin örneklerini oluşturamaz. CApplication , belge sınıfının örneklerini oluşturmak için kendi COM arabirimlerinden birinde bir yöntem sağlayan bir CoClass'tır. Aşağıdaki kod, temel sınıftan devralınan üyeyi kullanarak belge sınıfının örneklerini oluşturmanın CreateInstance CComCoClass ne kadar kolay olduğunu gösterir.

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

CComCoClass::Error

Bu statik işlev, istemciye IErrorInfo hata bilgileri sağlamak için arabirimi ayarlar.

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

Parametreler

lpszDesc
[in] Hatayı açıklayan dize. unicode sürümü Error lpszDesc'in LPCOLESTR türünde olduğunu belirtir; ANSI sürümü bir LPCSTR türü belirtir.

iid
[in] Hatayı tanımlayan arabirimin IID değeri veya hata işletim sistemi tarafından tanımlanmışsa GUID_NULL (varsayılan değer).

hRes
[in] Arayana geri döndürmek istediğiniz HRESULT. Varsayılan değer 0'tir. hRes hakkında daha fazla ayrıntı için bkz. Açıklamalar.

Nıd
[in] Hata açıklaması dizesinin depolandığı kaynak tanımlayıcısı. Bu değer, dahil olmak üzere 0x0200 ile 0xFFFF arasında yer almalıdır. Hata ayıklama derlemelerinde, nID geçerli bir dizenin dizinini oluşturmazsa BIR ASSERT sonucu verir. Sürüm derlemelerinde hata açıklaması dizesi "Bilinmeyen Hata" olarak ayarlanır.

dwHelpID
[in] Hatanın yardım bağlamı tanımlayıcısı.

lpszHelpFile
[in] Hatayı açıklayan yardım dosyasının yolu ve adı.

hInst
[in] Kaynağın tanıtıcısı. Varsayılan olarak, bu parametre CAtlModule'un _AtlModule::GetResourceInstancegenel örneği olan _AtlModule parametresidir.

Dönüş Değeri

Standart bir HRESULT değeri. Ayrıntılar için bkz. Açıklamalar.

Açıklamalar

çağrısı Erroryapmak için nesnenizin arabirimini ISupportErrorInfo uygulaması gerekir.

hRes parametresi sıfır değilse hRes Errordeğerini döndürür. hRes sıfırsa, dönüşünün ilk dört sürümü Error DISP_E_EXCEPTION. Son iki sürüm, makro MAKE_HRESULT( 1, FACILITY_ITF, nID ) sonucunu döndürür.

CComCoClass::GetObjectCLSID

Nesnenin CLSID'sini almak için tutarlı bir yol sağlar.

static const CLSID& WINAPI GetObjectCLSID();

Dönüş Değeri

Nesnenin sınıf tanımlayıcısı.

CComCoClass::GetObjectDescription

Bu statik işlev, sınıf nesneniz için metin açıklamasını alır.

static LPCTSTR WINAPI GetObjectDescription();

Dönüş Değeri

Sınıf nesnesinin açıklaması.

Açıklamalar

Varsayılan uygulama NULL döndürür. Bu yöntemi DECLARE_OBJECT_DESCRIPTION makroyla geçersiz kılabilirsiniz. Örneğin:

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 tarafından IComponentRegistrar::GetComponentsçağrılır. IComponentRegistrar , DLL'de tek tek bileşenleri kaydetmenize ve kaydını kaldırmanıza olanak tanıyan bir Otomasyon arabirimidir. ATL Proje Sihirbazı ile bir Bileşen Kayıt Şirketi nesnesi oluşturduğunuzda, sihirbaz arabirimi otomatik olarak uygular IComponentRegistrar . IComponentRegistrar genellikle Microsoft Transaction Server tarafından kullanılır.

ATL Proje Sihirbazı hakkında daha fazla bilgi için ATL Projesi Oluşturma makalesine bakın.

Ayrıca bkz.

Sınıfa Genel Bakış