Freigeben über


CComCoClass-Klasse

Diese Klasse stellt Methoden zum Erstellen von Instanzen einer Klasse und zum Abrufen der zugehörigen Eigenschaften bereit.

Syntax

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

Parameter

T
Ihre Klasse, abgeleitet von CComCoClass.

pclsid
Ein Zeiger auf die CLSID des Objekts.

Member

Öffentliche Methoden

Name Beschreibung
CComCoClass::CreateInstance (Statisch) Erstellt eine Instanz der Klasse und Abfragen für eine Schnittstelle.
CComCoClass::Error (Statisch) Gibt umfangreiche Fehlerinformationen an den Client zurück.
CComCoClass::GetObjectCLSID (Statisch) Gibt den Klassenbezeichner des Objekts zurück.
CComCoClass::GetObjectDescription (Statisch) Überschreiben, um die Beschreibung des Objekts zurückzugeben.

Hinweise

CComCoClass stellt Methoden zum Abrufen der CLSID eines Objekts, festlegen von Fehlerinformationen und Erstellen von Instanzen der Klasse bereit. Jede klasse, die in der Objektzuordnung registriert ist, sollte von CComCoClass.

CComCoClass definiert außerdem das Standardklassenfactory- und Aggregationsmodell für Ihr Objekt. CComCoClass verwendet die folgenden beiden Makros:

  • DECLARE_CLASSFACTORY Deklariert die Klassenfactory als CComClassFactory.

  • DECLARE_AGGREGATABLE Deklariert, dass Ihr Objekt aggregiert werden kann.

Sie können eine dieser Standardwerte außer Kraft setzen, indem Sie ein anderes Makro in der Klassendefinition angeben. Wenn Sie z. B. "CComClassFactory2" anstelle von "CComClassFactory2" verwenden möchten, geben Sie das DECLARE_CLASSFACTORY2 Makro an:CComClassFactory

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

Anforderungen

Kopfzeile: atlcom.h

CComCoClass::CreateInstance

Verwenden Sie diese CreateInstance Funktionen, um eine Instanz eines COM-Objekts zu erstellen und einen Schnittstellenzeiger abzurufen, ohne die COM-API zu verwenden.

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

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

Parameter

Q
Die COM-Schnittstelle, die über pp zurückgegeben werden soll.

punkOuter
[in] Das äußere unbekannte oder steuernde Unbekannte des Aggregats.

PP
[out] Die Adresse einer Zeigervariable, die den angeforderten Schnittstellenzeiger empfängt, wenn die Erstellung erfolgreich ist.

Rückgabewert

Ein HRESULT-Standardwert. Eine Beschreibung möglicher Rückgabewerte finden Sie unter CoCreateInstance im Windows SDK.

Hinweise

Verwenden Sie die erste Überladung dieser Funktion für die typische Objekterstellung; verwenden Sie die zweite Überladung, wenn Sie das zu erstellende Objekt aggregieren müssen.

Die ATL-Klasse, die das erforderliche COM-Objekt implementiert (d. h. die Klasse, die als erster Vorlagenparameter für CComCoClass verwendet wird), muss sich im selben Projekt wie der aufrufende Code befinden. Die Erstellung des COM-Objekts erfolgt durch die Klassenfactory, die für diese ATL-Klasse registriert ist.

Diese Funktionen sind nützlich zum Erstellen von Objekten, die Sie daran gehindert haben, mithilfe des OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO-Makros extern zu erstellen. Sie sind auch in Situationen hilfreich, in denen Sie die COM-API aus Gründen der Effizienz vermeiden möchten.

Beachten Sie, dass der Schnittstelle Q eine IID zugeordnet sein muss, die mithilfe des __uuidof-Operators abgerufen werden kann.

Beispiel

Im folgenden Beispiel ist eine vom Assistenten generierte ATL-Klasse abgeleitet, CDocument die von CComCoClass der IDocument Schnittstelle implementiert wird. Die Klasse wird in der Objektzuordnung mit dem OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO Makro registriert, sodass Clients keine Instanzen des Dokuments mithilfe von CoCreateInstance erstellen können. CApplication ist eine CoClass, die eine Methode für eine ihrer eigenen COM-Schnittstellen zum Erstellen von Instanzen der Dokumentklasse bereitstellt. Der folgende Code zeigt, wie einfach Instanzen der Dokumentklasse mithilfe des CreateInstance von der CComCoClass Basisklasse geerbten Members erstellt werden können.

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

CComCoClass::Error

Diese statische Funktion richtet die IErrorInfo Schnittstelle ein, um dem Client Fehlerinformationen bereitzustellen.

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

Parameter

lpszDesc
[in] Die Zeichenfolge, die den Fehler beschreibt. Die Unicode-Version von Error specifies that lpszDesc is of type LPCOLESTR; the ANSI version specifies a type of LPCSTR.

iid
[in] Die IID der Schnittstelle, die den Fehler oder die GUID_NULL (Standardwert) definiert, wenn der Fehler vom Betriebssystem definiert wird.

hRes
[in] Das HRESULT, das an den Aufrufer zurückgegeben werden soll. Der Standardwert ist 0. Weitere Informationen zu hRes finden Sie in den Hinweisen.

Nid
[in] Der Ressourcenbezeichner, in dem die Fehlerbeschreibungszeichenfolge gespeichert ist. Dieser Wert sollte zwischen 0x0200 und 0xFFFF einschließlich liegen. In Debugbuilds führt eine ASSERTION dazu, wenn nID keine gültige Zeichenfolge indiziert. In Releasebuilds wird die Fehlerbeschreibungszeichenfolge auf "Unbekannter Fehler" festgelegt.

dwHelpID
[in] Der Hilfekontextbezeichner für den Fehler.

lpszHelpFile
[in] Der Pfad und der Name der Hilfedatei, die den Fehler beschreibt.

hInst
[in] Das Handle für die Ressource. Dieser Parameter ist _AtlModule::GetResourceInstancestandardmäßig die _AtlModule globale Instanz von CAtlModule.

Rückgabewert

Ein HRESULT-Standardwert. Einzelheiten finden Sie unter "Hinweise".

Hinweise

Zum Aufrufen Errormuss das Objekt die ISupportErrorInfo Schnittstelle implementieren.

Wenn der hRes-Parameter ungleich null ist, wird Error der Wert von hRes zurückgegeben. Wenn hRes null ist, werden die ersten vier Versionen der Error Rückgabe DISP_E_EXCEPTION. Die letzten beiden Versionen geben das Ergebnis des Makros MAKE_HRESULT( 1, FACILITY_ITF, nID ) zurück.

CComCoClass::GetObjectCLSID

Bietet eine konsistente Möglichkeit zum Abrufen der CLSID des Objekts.

static const CLSID& WINAPI GetObjectCLSID();

Rückgabewert

Der Klassenbezeichner des Objekts.

CComCoClass::GetObjectDescription

Diese statische Funktion ruft die Textbeschreibung für Ihr Klassenobjekt ab.

static LPCTSTR WINAPI GetObjectDescription();

Rückgabewert

Beschreibung des Klassenobjekts.

Hinweise

Die Standardimplementierung gibt NULL zurück. Sie können diese Methode mit dem DECLARE_OBJECT_DESCRIPTION Makro überschreiben. Zum Beispiel:

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 wird aufgerufen von IComponentRegistrar::GetComponents. IComponentRegistrar ist eine Automatisierungsschnittstelle, mit der Sie einzelne Komponenten in einer DLL registrieren und aufheben können. Wenn Sie ein Komponentenregistrierungsstellenobjekt mit dem ATL-Projekt-Assistenten erstellen, implementiert der Assistent automatisch die IComponentRegistrar Schnittstelle. IComponentRegistrar wird in der Regel von Microsoft Transaction Server verwendet.

Weitere Informationen zum ATL-Projekt-Assistenten finden Sie im Artikel Erstellen eines ATL-Projekts.

Weitere Informationen

Klassenübersicht