Share via


CComCoClass-klasse

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze klasse biedt methoden voor het maken van exemplaren van een klasse en het verkrijgen van de eigenschappen.

Syntaxis

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

Parameterwaarden

T
Uw klas, afgeleid van CComCoClass.

pclsid
Een aanwijzer naar de CLSID van het object.

Leden

Openbare methoden

Naam Description
CComCoClass::CreateInstance (Statisch) Hiermee maakt u een exemplaar van de klasse en query's voor een interface.
CComCoClass::Error (Statisch) Retourneert uitgebreide foutinformatie naar de client.
CComCoClass::GetObjectCLSID (Statisch) Retourneert de klasse-id van het object.
CComCoClass::GetObjectDescription (Statisch) Overschrijven om de beschrijving van het object te retourneren.

Opmerkingen

CComCoClass biedt methoden voor het ophalen van de CLSID van een object, het instellen van foutinformatie en het maken van exemplaren van de klasse. Elke klasse die in de objecttoewijzing is geregistreerd, moet worden afgeleid van CComCoClass.

CComCoClass definieert ook het standaardklassefactory- en aggregatiemodel voor uw object. CComCoClass gebruikt de volgende twee macro's:

U kunt een van deze standaardwaarden overschrijven door een andere macro op te geven in uw klassedefinitie. Als u bijvoorbeeld CComClassFactory2 wilt gebruiken in plaats van CComClassFactory, geeft u de DECLARE_CLASSFACTORY2 macro op:

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

Requirements

Koptekst: atlcom.h

CComCoClass::CreateInstance

Gebruik deze CreateInstance functies om een exemplaar van een COM-object te maken en een interfaceaanwijzer op te halen zonder de COM-API te gebruiken.

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

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

Parameterwaarden

Q
De COM-interface die moet worden geretourneerd via pp.

punkOuter
[in] De buitenste onbekende of controle onbekende van de statistische functie.

Pp
[uit] Het adres van een aanwijzervariabele die de aangevraagde interfacepointer ontvangt als het maken slaagt.

Retourwaarde

Een standaard HRESULT-waarde. Zie CoCreateInstance in de Windows SDK voor een beschrijving van mogelijke retourwaarden.

Opmerkingen

Gebruik de eerste overbelasting van deze functie voor het maken van objecten; gebruik de tweede overbelasting wanneer u het object dat wordt gemaakt, moet aggregeren.

De ATL-klasse die het vereiste COM-object implementeert (de klasse die wordt gebruikt als de eerste sjabloonparameter voor CComCoClass) moet zich in hetzelfde project bevinden als de aanroepende code. Het maken van het COM-object wordt uitgevoerd door de klassefactory die is geregistreerd voor deze ATL-klasse.

Deze functies zijn handig voor het maken van objecten die u niet extern hebt gemaakt met behulp van de OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO macro. Ze zijn ook handig in situaties waarin u de COM-API wilt vermijden om redenen van efficiëntie.

Houd er rekening mee dat aan de interface Q een IID moet zijn gekoppeld die kan worden opgehaald met behulp van de operator __uuidof .

Example

In het volgende voorbeeld CDocument is een door de wizard gegenereerde ATL-klasse die is afgeleid van CComCoClass die de IDocument interface implementeert. De klasse is geregistreerd in de objecttoewijzing met de OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO macro, zodat clients geen exemplaren van het document kunnen maken met CoCreateInstance. CApplication is een CoClass die een methode biedt op een van de eigen COM-interfaces om exemplaren van de documentklasse te maken. De onderstaande code laat zien hoe eenvoudig het is om exemplaren van de documentklasse te maken met behulp van het CreateInstance lid dat is overgenomen van de CComCoClass basisklasse.

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

CComCoClass::Error

Met deze statische functie wordt de IErrorInfo interface ingesteld om foutinformatie aan de client te verstrekken.

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

Parameterwaarden

lpszDesc
[in] De tekenreeks die de fout beschrijft. De Unicode-versie geeft Error aan dat lpszDesc van het type LPCOLESTR is. De ANSI-versie geeft een type LPCSTR op.

iid
[in] De IID van de interface die de fout definieert of GUID_NULL (de standaardwaarde) als de fout is gedefinieerd door het besturingssysteem.

hRes
[in] Het HRESULT dat u wilt terugsturen naar de beller. De standaardwaarde is 0. Zie Opmerkingen voor meer informatie over hRes.

nID
[in] De resource-id waarin de tekenreeks voor foutbeschrijving wordt opgeslagen. Deze waarde moet liggen tussen 0x0200 en 0xFFFF, inclusief. In builds voor foutopsporing resulteert een ASSERT als nID geen geldige tekenreeks indexeert. In release-builds wordt de tekenreeks voor foutbeschrijving ingesteld op 'Onbekende fout'.

dwHelpID
[in] De Help-context-id voor de fout.

lpszHelpFile
[in] Het pad en de naam van het Help-bestand waarin de fout wordt beschreven.

hInst
[in] De ingang voor de resource. Deze parameter is _AtlModule::GetResourceInstancestandaard, waar _AtlModule is het globale exemplaar van CAtlModule.

Retourwaarde

Een standaard HRESULT-waarde. Zie Opmerkingen voor meer informatie.

Opmerkingen

Als u de aanroep wilt aanroepen Error, moet uw object de ISupportErrorInfo interface implementeren.

Als de parameter hRes niet-nul is, Error retourneert u de waarde van hRes. Als hRes nul is, worden de eerste vier versies van Error retour DISP_E_EXCEPTION. De laatste twee versies retourneren het resultaat van de macro MAKE_HRESULT( 1, FACILITY_ITF,nID).

CComCoClass::GetObjectCLSID

Biedt een consistente manier om de CLSID van het object op te halen.

static const CLSID& WINAPI GetObjectCLSID();

Retourwaarde

De klasse-id van het object.

CComCoClass::GetObjectDescription

Met deze statische functie wordt de tekstbeschrijving voor uw klasseobject opgehaald.

static LPCTSTR WINAPI GetObjectDescription();

Retourwaarde

De beschrijving van het klasseobject.

Opmerkingen

De standaard implementatie retourneert NULL. U kunt deze methode overschrijven met de DECLARE_OBJECT_DESCRIPTION macro. Voorbeeld:

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 wordt aangeroepen door IComponentRegistrar::GetComponents. IComponentRegistrar is een Automation-interface waarmee u afzonderlijke onderdelen in een DLL kunt registreren en de registratie ervan ongedaan kunt maken. Wanneer u een componentregistrarobject maakt met de wizard ATL-project, wordt de interface automatisch geïmplementeerd door de IComponentRegistrar wizard. IComponentRegistrar wordt doorgaans gebruikt door Microsoft Transaction Server.

Zie het artikel Een ATL-project maken voor meer informatie over de wizard ATL-project.

Zie ook

Overzicht van klassen