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 CComCoClass
tü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 CComCoClass
tü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 CComClassFactory
CComClassFactory2 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::GetResourceInstance
genel ö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ı Error
yapmak için nesnenizin arabirimini ISupportErrorInfo
uygulaması gerekir.
hRes parametresi sıfır değilse hRes Error
değ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.