CComCoClass, classe

Cette classe fournit des méthodes pour créer des instances d’une classe et obtenir ses propriétés.

Syntaxe

template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass

Paramètres

T
Votre classe, dérivée de CComCoClass.

pclsid
Pointeur vers le CLSID de l’objet.

Membres

Méthodes publiques

Nom Description
CComCoClass ::CreateInstance (Statique) Crée une instance de la classe et interroge une interface.
CComCoClass ::Error (Statique) Retourne des informations d’erreur enrichies au client.
CComCoClass ::GetObjectCLSID (Statique) Retourne l’identificateur de classe de l’objet.
CComCoClass ::GetObjectDescription (Statique) Remplacez la description de l’objet.

Notes

CComCoClass fournit des méthodes pour récupérer le CLSID d’un objet, définir des informations d’erreur et créer des instances de la classe. Toute classe inscrite dans le mappage d’objets doit être dérivée de CComCoClass.

CComCoClass définit également la fabrique de classes et le modèle d’agrégation par défaut pour votre objet. CComCoClass utilise les deux macros suivantes :

  • DECLARE_CLASSFACTORY déclare la fabrique de classe à CComClassFactory.

  • DECLARE_AGGREGATABLE Déclare que votre objet peut être agrégé.

Vous pouvez remplacer l’une de ces valeurs par défaut en spécifiant une autre macro dans votre définition de classe. Par exemple, pour utiliser CComClassFactory2 au lieu de CComClassFactory, spécifiez 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

Spécifications

En-tête : atlcom.h

CComCoClass ::CreateInstance

Utilisez ces CreateInstance fonctions pour créer une instance d’un objet COM et récupérer un pointeur d’interface sans utiliser l’API COM.

template <class  Q>
static HRESULT CreateInstance( Q** pp);

template <class  Q>
static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp);

Paramètres

Q
Interface COM qui doit être retournée via pp.

punkOuter
[in] Inconnu externe ou contrôle inconnu de l’agrégat.

pp
[out] Adresse d’une variable de pointeur qui reçoit le pointeur d’interface demandé si la création réussit.

Valeur de retour

Valeur HRESULT standard. Consultez CoCreateInstance dans le Kit de développement logiciel (SDK) Windows pour obtenir une description des valeurs de retour possibles.

Notes

Utilisez la première surcharge de cette fonction pour la création d’objets classique ; utilisez la deuxième surcharge lorsque vous devez agréger l’objet en cours de création.

La classe ATL implémentant l’objet COM requis (autrement dit, la classe utilisée comme premier paramètre de modèle pour CComCoClass) doit se trouver dans le même projet que le code appelant. La création de l’objet COM est effectuée par la fabrique de classes inscrite pour cette classe ATL.

Ces fonctions sont utiles pour créer des objets que vous n’avez pas pu créer en externe à l’aide de la macro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO . Ils sont également utiles dans les situations où vous souhaitez éviter l’API COM pour des raisons d’efficacité.

Notez que l’interface Q doit avoir un IID associé à celui-ci qui peut être récupéré à l’aide de l’opérateur __uuidof .

Exemple

Dans l’exemple suivant, CDocument il s’agit d’une classe ATL générée par l’Assistant qui CComCoClass implémente l’interface IDocument . La classe est inscrite dans le mappage d’objets avec la macro OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO afin que les clients ne puissent pas créer d’instances du document à l’aide de CoCreateInstance. CApplication est une classe CoClass qui fournit une méthode sur l’une de ses propres interfaces COM pour créer des instances de la classe de document. Le code ci-dessous montre comment il est facile de créer des instances de la classe de document à l’aide du CreateInstance membre hérité de la CComCoClass classe de base.

STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
   *ppDoc = NULL;
   return CMyDoc::CreateInstance(ppDoc);
}

CComCoClass ::Error

Cette fonction statique configure l’interface IErrorInfo pour fournir des informations d’erreur au 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());

Paramètres

lpszDesc
[in] Chaîne décrivant l’erreur. La version Unicode de Error spécifie que lpszDesc est de type LPCOLESTR ; la version ANSI spécifie un type de LPCSTR.

iid
[in] IID de l’interface définissant l’erreur ou GUID_NULL (valeur par défaut) si l’erreur est définie par le système d’exploitation.

hRes
[in] HRESULT que vous souhaitez retourner à l’appelant. La valeur par défaut est 0. Pour plus d’informations sur hRes, consultez Remarques.

nID
[in] Identificateur de ressource où la chaîne de description d’erreur est stockée. Cette valeur doit être comprise entre 0x0200 et 0xFFFF, de manière inclusive. Dans les builds de débogage, une assertion se produit si nID n’indexe pas de chaîne valide. Dans les builds de mise en production, la chaîne de description d’erreur est définie sur « Erreur inconnue ».

dwHelpID
[in] Identificateur de contexte d’aide pour l’erreur.

lpszHelpFile
[in] Chemin d’accès et nom du fichier d’aide décrivant l’erreur.

hInst
[in] Handle de la ressource. Par défaut, ce paramètre est _AtlModule::GetResourceInstance, où _AtlModule est l’instance globale de CAtlModule.

Valeur de retour

Valeur HRESULT standard. Pour plus d'informations, consultez Notes.

Notes

Pour appeler Error, votre objet doit implémenter l’interface ISupportErrorInfo .

Si le paramètre hRes n’est pas différent de zéro, Error retourne la valeur de hRes. Si hRes est égal à zéro, les quatre premières versions de Error retour DISP_E_EXCEPTION. Les deux dernières versions retournent le résultat de la macro MAKE_HRESULT( 1, FACILITY_ITF, nID ).

CComCoClass ::GetObjectCLSID

Fournit un moyen cohérent de récupérer le CLSID de l’objet.

static const CLSID& WINAPI GetObjectCLSID();

Valeur de retour

Identificateur de classe de l’objet.

CComCoClass ::GetObjectDescription

Cette fonction statique récupère la description de texte de votre objet de classe.

static LPCTSTR WINAPI GetObjectDescription();

Valeur de retour

Description de l’objet de classe.

Notes

L’implémentation par défaut retourne NULL. Vous pouvez remplacer cette méthode par la macro DECLARE_OBJECT_DESCRIPTION . Par exemple :

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 est appelé par IComponentRegistrar::GetComponents. IComponentRegistrar est une interface Automation qui vous permet d’inscrire et de désinscrire des composants individuels dans une DLL. Lorsque vous créez un objet De bureau d’enregistrement de composants avec l’Assistant Projet ATL, l’Assistant implémente automatiquement l’interface IComponentRegistrar . IComponentRegistrar est généralement utilisé par Microsoft Transaction Server.

Pour plus d’informations sur l’Assistant Projet ATL, consultez l’article Création d’un projet ATL.

Voir aussi

Vue d’ensemble de la classe