Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.