Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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:
DECLARE_CLASSFACTORY Declareert de klassefactory als CComClassFactory.
DECLARE_AGGREGATABLE Declareert dat uw object kan worden samengevoegd.
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.