Classe CComCoClass
Questa classe fornisce metodi per la creazione di istanze di una classe e per ottenere le relative proprietà.
Sintassi
template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass
Parametri
T
Classe derivata da CComCoClass
.
pclsid
Puntatore al CLSID dell'oggetto .
Membri
Metodi pubblici
Nome | Descrizione |
---|---|
CComCoClass::CreateInstance | (Statico) Crea un'istanza della classe e delle query per un'interfaccia. |
CComCoClass::Error | (Statico) Restituisce informazioni dettagliate sull'errore al client. |
CComCoClass::GetObjectCLSID | (Statico) Restituisce l'identificatore di classe dell'oggetto. |
CComCoClass::GetObjectDescription | (Statico) Eseguire l'override per restituire la descrizione dell'oggetto. |
Osservazioni:
CComCoClass
fornisce metodi per il recupero di CLSID di un oggetto, l'impostazione delle informazioni sull'errore e la creazione di istanze della classe . Qualsiasi classe registrata nella mappa oggetti deve essere derivata da CComCoClass
.
CComCoClass
definisce anche il modello di class factory e di aggregazione predefinito per l'oggetto. CComCoClass
utilizza le due macro seguenti:
DECLARE_CLASSFACTORY dichiara che la class factory deve essere CComClassFactory.
DECLARE_AGGREGATABLE dichiara che l'oggetto può essere aggregato.
È possibile eseguire l'override di una di queste impostazioni predefinite specificando un'altra macro nella definizione della classe. Ad esempio, per usare CComClassFactory2 anziché CComClassFactory
, specificare la macro DECLARE_CLASSFACTORY2 :
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
Requisiti
Intestazione: atlcom.h
CComCoClass::CreateInstance
Usare queste CreateInstance
funzioni per creare un'istanza di un oggetto COM e recuperare un puntatore all'interfaccia senza usare l'API COM.
template <class Q>
static HRESULT CreateInstance( Q** pp);
template <class Q>
static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp);
Parametri
Q
Interfaccia COM che deve essere restituita tramite pp.
punkOuter
[in] Sconosciuto esterno o controllo sconosciuto dell'aggregazione.
Pp
[out] Indirizzo di una variabile puntatore che riceve il puntatore di interfaccia richiesto se la creazione ha esito positivo.
Valore restituito
Valore HRESULT standard. Per una descrizione dei possibili valori restituiti, vedere CoCreateInstance in Windows SDK.
Osservazioni:
Usare il primo overload di questa funzione per la creazione di oggetti tipici; utilizzare il secondo overload quando è necessario aggregare l'oggetto creato.
La classe ATL che implementa l'oggetto COM richiesto, ovvero la classe usata come primo parametro di modello per CComCoClass, deve trovarsi nello stesso progetto del codice chiamante. La creazione dell'oggetto COM viene eseguita dalla class factory registrata per questa classe ATL.
Queste funzioni sono utili per la creazione di oggetti che è stato impedito di creare esternamente utilizzando la macro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO . Sono utili anche nelle situazioni in cui si vuole evitare l'API COM per motivi di efficienza.
Si noti che all'interfaccia Q deve essere associato un IID che può essere recuperato usando l'operatore __uuidof .
Esempio
Nell'esempio seguente è CDocument
una classe ATL generata dalla procedura guidata derivata da CComCoClass
che implementa l'interfaccia IDocument
. La classe viene registrata nella mappa oggetti con la macro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO in modo che i client non possano creare istanze del documento usando CoCreateInstance. CApplication
è una CoClass che fornisce un metodo su una delle proprie interfacce COM per creare istanze della classe del documento. Il codice seguente illustra quanto sia semplice creare istanze della classe di documento usando il CreateInstance
membro ereditato dalla CComCoClass
classe di base.
STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
*ppDoc = NULL;
return CMyDoc::CreateInstance(ppDoc);
}
CComCoClass::Error
Questa funzione statica configura l'interfaccia IErrorInfo
per fornire informazioni sugli errori al client.
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());
Parametri
lpszDesc
[in] Stringa che descrive l'errore. La versione Unicode di Error
specifica che lpszDesc è di tipo LPCOLESTR. La versione ANSI specifica un tipo di LPCSTR.
iid
[in] IID dell'interfaccia che definisce l'errore o il GUID_NULL (valore predefinito) se l'errore è definito dal sistema operativo.
hRes
[in] HRESULT che si desidera restituire al chiamante. Il valore predefinito è 0. Per altre informazioni su hRes, vedere Osservazioni.
nID
[in] Identificatore della risorsa in cui è archiviata la stringa di descrizione dell'errore. Questo valore deve essere compreso tra 0x0200 e 0xFFFF, inclusi. Nelle compilazioni di debug, un valore ASSERT restituirà se nID non indicizza una stringa valida. Nelle build di rilascio, la stringa di descrizione dell'errore verrà impostata su "Errore sconosciuto".
dwHelpID
[in] Identificatore del contesto della Guida per l'errore.
lpszHelpFile
[in] Percorso e nome del file della Guida che descrive l'errore.
hInst
[in] Handle per la risorsa. Per impostazione predefinita, questo parametro è _AtlModule::GetResourceInstance
, dove _AtlModule
è l'istanza globale di CAtlModule.
Valore restituito
Valore HRESULT standard. Per informazioni dettagliate, vedere la sezione Osservazioni.
Osservazioni:
Per chiamare Error
, l'oggetto deve implementare l'interfaccia ISupportErrorInfo
.
Se il parametro hRes è diverso da zero, Error
restituisce il valore di hRes. Se hRes è zero, le prime quattro versioni del Error
DISP_E_EXCEPTION restituito. Le ultime due versioni restituiscono il risultato della macro MAKE_HRESULT( 1, FACILITY_ITF, nID ).
CComCoClass::GetObjectCLSID
Fornisce un modo coerente per recuperare il CLSID dell'oggetto.
static const CLSID& WINAPI GetObjectCLSID();
Valore restituito
Identificatore della classe dell'oggetto.
CComCoClass::GetObjectDescription
Questa funzione statica recupera la descrizione del testo per l'oggetto classe.
static LPCTSTR WINAPI GetObjectDescription();
Valore restituito
Descrizione dell'oggetto classe.
Osservazioni:
L'implementazione predefinita restituisce NULL. È possibile eseguire l'override di questo metodo con la macro DECLARE_OBJECT_DESCRIPTION . Ad esempio:
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
viene chiamato da IComponentRegistrar::GetComponents
. IComponentRegistrar
è un'interfaccia di automazione che consente di registrare e annullare la registrazione di singoli componenti in una DLL. Quando si crea un oggetto Registrar del componente con la Creazione guidata progetto ATL, la procedura guidata implementerà automaticamente l'interfaccia IComponentRegistrar
. IComponentRegistrar
viene in genere utilizzato da Microsoft Transaction Server.
Per altre informazioni sulla Creazione guidata progetto ATL, vedere l'articolo Creazione di un progetto ATL.