Sdílet prostřednictvím


CComCoClass – třída

Tato třída poskytuje metody pro vytváření instancí třídy a získání jeho vlastností.

Syntaxe

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

Parametry

T
Vaše třída odvozená z CComCoClass.

pclsid
Ukazatel na CLSID objektu.

Členové

Veřejné metody

Název Popis
CComCoClass::CreateInstance (Statické) Vytvoří instanci třídy a dotazů pro rozhraní.
CComCoClass::Error (Statické) Vrátí klientovi bohaté informace o chybě.
CComCoClass::GetObjectCLSID (Statické) Vrátí identifikátor třídy objektu.
CComCoClass::GetObjectDescription (Statické) Přepsáním vrátíte popis objektu.

Poznámky

CComCoClass poskytuje metody pro načtení CLSID objektu, nastavení informací o chybě a vytváření instancí třídy. Každá třída registrovaná v mapě objektu by měla být odvozena z CComCoClass.

CComCoClass definuje také výchozí objekt pro vytváření tříd a agregační model. CComCoClass používá následující dvě makra:

  • DECLARE_CLASSFACTORY Deklaruje objekt pro vytváření tříd jako CComClassFactory.

  • DECLARE_AGGREGATABLE Deklaruje, že objekt lze agregovat.

Kteroukoli z těchto výchozích hodnot můžete přepsat zadáním jiného makra v definici třídy. Chcete-li například použít CComClassFactory2 místo CComClassFactory, zadejte DECLARE_CLASSFACTORY2 makro:

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

Požadavky

Hlavička: atlcom.h

CComCoClass::CreateInstance

Pomocí těchto CreateInstance funkcí můžete vytvořit instanci objektu COM a načíst ukazatel rozhraní bez použití rozhraní API modelu COM.

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

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

Parametry

Q
Rozhraní MODELU COM, které by mělo být vráceno přes pp.

punkOuter
[v] Vnější neznámý nebo řídicí neznámý název agregace.

Pp
[ven] Adresa proměnné ukazatele, která obdrží požadovaný ukazatel rozhraní v případě úspěšného vytvoření.

Návratová hodnota

Standardní hodnota HRESULT. Popis možných návratových hodnot najdete v tématu CoCreateInstance v sadě Windows SDK.

Poznámky

Pro typické vytvoření objektu použijte první přetížení této funkce; použijte druhé přetížení, pokud potřebujete agregovat objekt, který se vytváří.

Třída ATL implementuje požadovaný objekt COM (tj. třída použitá jako první parametr šablony pro CComCoClass) musí být ve stejném projektu jako volající kód. Vytvoření objektu COM provádí továrna třídy zaregistrovaná pro tuto třídu ATL.

Tyto funkce jsou užitečné pro vytváření objektů, které jste zabránili externímu vytváření creatable pomocí makra OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO . Jsou také užitečné v situacích, kdy se chcete vyhnout rozhraní COM API z důvodů efektivity.

Všimněte si, že rozhraní Q musí mít přidružený IID, který lze načíst pomocí operátoru __uuidof .

Příklad

V následujícím příkladu je třída ATL generovaná průvodcem odvozená od toho, CDocument která implementuje IDocument rozhraní.CComCoClass Třída je zaregistrovaná v mapě objektu pomocí makra OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO, aby klienti nemohli vytvářet instance dokumentu pomocí instance CoCreateInstance. CApplication je Třída CoClass, která poskytuje metodu na jednom z jeho vlastních rozhraní COM pro vytváření instancí třídy dokumentu. Následující kód ukazuje, jak snadné je vytvořit instance třídy dokumentu pomocí člena CreateInstance zděděného ze CComCoClass základní třídy.

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

CComCoClass::Error

Tato statická funkce nastaví IErrorInfo rozhraní tak, aby klientovi poskytovalo informace o chybách.

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

Parametry

lpszDesc
[v] Řetězec popisující chybu. Verze Error Unicode určuje, že lpszDesc je typu LPCOLESTR; verze ANSI určuje typ LPCSTR.

iid
[v] IID rozhraní definující chybu nebo GUID_NULL (výchozí hodnota), pokud je chyba definována operačním systémem.

hRes
[v] Hodnota HRESULT, kterou chcete vrátit volajícímu. Výchozí hodnota je 0. Další podrobnosti o hRes naleznete v poznámkách.

Nid
[v] Identifikátor prostředku, kde je uložen řetězec popisu chyby. Tato hodnota by měla být mezi 0x0200 a 0xFFFF(včetně). V buildech ladění bude výsledkem ASSERT, pokud nID neindexuje platný řetězec. V buildech vydaných verzí se řetězec popisu chyby nastaví na Neznámá chyba.

dwHelpID
[v] Identifikátor kontextu nápovědy pro chybu.

lpszHelpFile
[v] Cesta a název souboru nápovědy popisující chybu

hInst
[v] Popisovač prostředku. Ve výchozím nastavení je _AtlModule::GetResourceInstancetento parametr , kde _AtlModule je globální instance CAtlModule.

Návratová hodnota

Standardní hodnota HRESULT. Podrobnosti najdete v části Poznámky.

Poznámky

Chcete-li volat Error, objekt musí implementovat ISupportErrorInfo rozhraní.

Pokud je parametr hRes nenulová, Error vrátí hodnotu hRes. Pokud je hodnota hRes nula, pak první čtyři verze návratových Error DISP_E_EXCEPTION. Poslední dvě verze vrátí výsledek makra MAKE_HRESULT( 1, FACILITY_ITF; nID ).

CComCoClass::GetObjectCLSID

Poskytuje konzistentní způsob načtení CLSID objektu.

static const CLSID& WINAPI GetObjectCLSID();

Návratová hodnota

Identifikátor třídy objektu.

CComCoClass::GetObjectDescription

Tato statická funkce načte textový popis objektu třídy.

static LPCTSTR WINAPI GetObjectDescription();

Návratová hodnota

Popis objektu třídy.

Poznámky

Výchozí implementace vrátí hodnotu NULL. Tuto metodu můžete přepsat DECLARE_OBJECT_DESCRIPTION makrem. Příklad:

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.

GetObjectDescriptionje volána .IComponentRegistrar::GetComponents IComponentRegistrar je rozhraní automation, které umožňuje zaregistrovat a zrušit registraci jednotlivých komponent v knihovně DLL. Když vytvoříte objekt registrátora komponent pomocí Průvodce projektem ATL, průvodce automaticky implementuje IComponentRegistrar rozhraní. IComponentRegistrar obvykle používá Microsoft Transaction Server.

Další informace o Průvodci projektem ATL naleznete v článku Vytvoření projektu ATL.

Viz také

Přehled třídy