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.