CComCoClass::CreateInstance
Verwenden Sie diese CreateInstance-Funktionen, um eine Instanz eines COM-Objekts zu erstellen und einen Schnittstellenzeiger abzurufen, ohne COM-APIs 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 Erstellung folgt.
Rückgabewert
Ein HRESULT-Standardwert.Siehe CoCreateInstance in Windows SDK für eine Beschreibung möglicher Rückgabewerten.
Hinweise
Verwenden Sie die erste Überladung dieser Funktion für typische Objekterstellung; Verwenden Sie die zweite Überladung, wenn das Objekt aggregieren müssen, das erstellt wird.
Die ATL-Klasse, die das erforderliche COM-Objekt implementiert (das heißt, die Klasse verwendet als der erste Vorlagenparameter zu CComCoClass) muss im gleichen Projekt wie der aufrufende Code sein.Die Erstellung des COM-Objekts wird durch die Klassenfactory durchgeführt, die für diese ATL-Klasse registriert wird.
Diese Funktionen sind für das Erstellen von hilfreich, dass Sie am Sein extern erstellbar verhindert haben, indem Sie das OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO-Makro verwenden.Sie sind auch in Situationen, in denen Sie COM-APIs aus Gründen der Effizienz vermeiden möchten.
Beachten Sie, dass die Schnittstelle Q ein IID verfügen muss, wird auch, die mithilfe des Operators __uuidof abgerufen werden kann.
Beispiel
Im folgenden Beispiel ist CDocument eine vom Assistenten generierte ATL-Klasse, die von CComCoClass abgeleitet ist, die die IDocument-Schnittstelle implementiert.Die Klasse wird in der Objektzuordnung mit dem OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO-Makro registriert, sodass Clients Instanzen des Dokuments nicht mit CoCreateInstance erstellen.CApplication ist eine Co-Klasse, die eine Methode auf einer eigenen COM-Schnittstellen zur Verfügung stellt, um Instanzen der Dokumentklasse zu erstellen.Der folgende Code zeigt, wie die es Instanzen der Dokumentklasse mithilfe des CreateInstance-Members einfach sind, der von der CComCoClass Basisklasse geerbt wird erstellt.
STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
*ppDoc = NULL;
return CMyDoc::CreateInstance(ppDoc);
}
Anforderungen
Header: möchten