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::GetResourceInstance
standardmäßig die _AtlModule
globale Instanz von CAtlModule.
Rückgabewert
Ein HRESULT-Standardwert. Einzelheiten finden Sie unter "Hinweise".
Hinweise
Zum Aufrufen Error
muss 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.