CComObject, classe
Cette classe implémente IUnknown
pour un objet non agrégé.
Syntaxe
template<class Base>
class CComObject : public Base
Paramètres
Base
Votre classe, dérivée de CComObjectRoot ou CComObjectRootEx, ainsi que de toutes les autres interfaces que vous souhaitez prendre en charge sur l’objet.
Membres
Constructeurs publics
Nom | Description |
---|---|
CComObject ::CComObject | Constructeur . |
CComObject ::~CComObject | Destructeur. |
Méthodes publiques
Nom | Description |
---|---|
CComObject ::AddRef | Incrémente le nombre de références sur l’objet. |
CComObject ::CreateInstance | (Statique) Crée un CComObject objet. |
CComObject ::QueryInterface | Récupère un pointeur vers l'interface demandée. |
CComObject ::Release | Décrémente le nombre de références sur l’objet. |
Notes
CComObject
implémente IUnknown pour un objet non agrégé. Toutefois, les appels à QueryInterface
, AddRef
et Release
sont délégués à CComObjectRootEx
.
Pour plus d’informations sur l’utilisation CComObject
, consultez l’article Principes de base des objets COM ATL.
Hiérarchie d'héritage
Base
CComObject
Spécifications
En-tête : atlcom.h
CComObject ::AddRef
Incrémente le nombre de références sur l’objet.
STDMETHOD_(ULONG, AddRef)();
Valeur de retour
Cette fonction retourne le nouveau nombre de références incrémentées sur l’objet. Cette valeur peut être utile pour les diagnostics ou les tests.
CComObject ::CComObject
Le constructeur incrémente le nombre de verrous du module.
CComObject(void* = NULL);
Paramètres
vide*
[in] Ce paramètre non nommé n’est pas utilisé. Il existe pour la symétrie avec d’autres CComXXXObjectXXX
constructeurs.
Notes
Le destructeur le décrémente.
Si un CComObject
objet dérivé est correctement construit à l’aide de l’opérateur new
, le nombre de références initial est égal à 0. Pour définir le nombre de références sur la valeur appropriée (1), effectuez un appel à la fonction AddRef .
CComObject ::~CComObject
Destructeur.
CComObject();
Notes
Libère toutes les ressources allouées, appelle FinalRelease et décrémente le nombre de verrous du module.
CComObject ::CreateInstance
Cette fonction statique vous permet de créer un objet CComObject<>Base
, sans surcharge de CoCreateInstance.
static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);
Paramètres
pp
[out] Pointeur vers un pointeur CComObject><Base
. En CreateInstance
cas d’échec, pp a la valeur NULL.
Valeur de retour
Valeur HRESULT standard.
Notes
L’objet retourné a un nombre de références égal à zéro. Appelez AddRef
donc immédiatement, puis utilisez Release
pour libérer la référence sur le pointeur de l’objet lorsque vous avez terminé.
Si vous n’avez pas besoin d’un accès direct à l’objet, mais que vous souhaitez toujours créer un objet sans surcharge CoCreateInstance
, utilisez CComCoClass ::CreateInstance à la place.
Exemple
class ATL_NO_VTABLE CMyCircle :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyCircle, &CLSID_MyCircle>,
public IDispatchImpl<IMyCircle, &IID_IMyCircle, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CMyCircle()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MYCIRCLE)
DECLARE_NOT_AGGREGATABLE(CMyCircle)
BEGIN_COM_MAP(CMyCircle)
COM_INTERFACE_ENTRY(IMyCircle)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
public:
STDMETHOD(get_XCenter)(double* pVal);
};
// Create a local instance of COM object CMyCircle.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
ATLASSERT(SUCCEEDED(hRes));
// Increment reference count immediately
pCircle->AddRef();
// Access method of COM object
hRes = pCircle->get_XCenter(&x);
// Decrement reference count when done
pCircle->Release();
pCircle = NULL;
CComObject ::QueryInterface
Récupère un pointeur vers l'interface demandée.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);
Paramètres
iid
[in] Identificateur de l'interface demandée.
ppvObject
[out] Pointeur vers le pointeur d’interface identifié par iid. Si l’objet ne prend pas en charge cette interface, ppvObject a la valeur NULL.
pp
[out] Pointeur vers le pointeur d’interface identifié par type Q
. Si l’objet ne prend pas en charge cette interface, pp a la valeur NULL.
Valeur de retour
Valeur HRESULT standard.
CComObject ::Release
Décrémente le nombre de références sur l’objet.
STDMETHOD_(ULONG, Release)();
Valeur de retour
Cette fonction retourne le nouveau nombre de références décrémentées sur l’objet. Dans les builds de débogage, la valeur de retour peut être utile pour les diagnostics ou les tests. Dans les builds non debug, Release
retourne toujours 0.
Voir aussi
CComAggObject, classe
CComPolyObject, classe
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
Vue d’ensemble de la classe