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.
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::GetResourceInstance
tento 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.
GetObjectDescription
je 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.