Partager via


CoRegisterClassObject, fonction (combaseapi.h)

Inscrit un objet de classe EXE auprès d’OLE afin que d’autres applications puissent s’y connecter.

Syntaxe

HRESULT CoRegisterClassObject(
  [in]  REFCLSID  rclsid,
  [in]  LPUNKNOWN pUnk,
  [in]  DWORD     dwClsContext,
  [in]  DWORD     flags,
  [out] LPDWORD   lpdwRegister
);

Paramètres

[in] rclsid

CLSID à inscrire.

[in] pUnk

Pointeur vers l’interface IUnknown sur l’objet de classe dont la disponibilité est en cours de publication.

[in] dwClsContext

Contexte dans lequel le code exécutable doit être exécuté. Pour plus d’informations sur ces valeurs de contexte, consultez l’énumération CLSCTX .

[in] flags

Indique comment les connexions sont établies à l’objet de classe. Pour plus d’informations sur ces indicateurs, consultez l’énumération REGCLS .

[out] lpdwRegister

Pointeur vers une valeur qui identifie l’objet de classe inscrit ; utilisé ultérieurement par la fonction CoRevokeClassObject pour révoquer l’inscription.

Valeur retournée

Cette fonction peut retourner les valeurs de retour standard E_INVALIDARG, E_OUTOFMEMORY et E_UNEXPECTED, ainsi que les valeurs suivantes.

Code de retour Description
S_OK
L’objet de classe a été inscrit avec succès.

Remarques

Les applications d’objet EXE doivent appeler CoRegisterClassObject au démarrage. Il peut également être utilisé pour inscrire des objets internes en vue d’une utilisation par le même EXE ou un autre code (par exemple, des DLL) que l’EXE utilise. Seules les applications d’objet EXE appellent CoRegisterClassObject. Les gestionnaires d’objets ou les applications d’objets DLL n’appellent pas cette fonction. Au lieu de cela, ils doivent implémenter et exporter la fonction DllGetClassObject .

Au démarrage, une application objet EXE à usage multiple doit créer un objet de classe (avec l’interface IClassFactory ) et appeler CoRegisterClassObject pour inscrire l’objet de classe. Les applications objet qui prennent en charge plusieurs classes différentes (par exemple, plusieurs types d’objets pouvant être incorporés) doivent allouer et inscrire un objet de classe différent pour chacune d’elles.

Plusieurs inscriptions du même objet de classe sont indépendantes et ne génèrent pas d’erreur. Chaque inscription suivante génère une clé unique dans lpdwRegister.

Les applications MDI (Multiple Document Interface) doivent inscrire leurs objets de classe. Les applications SDI (Single Document Interface) doivent inscrire leurs objets de classe uniquement si elles peuvent être démarrées à l’aide du commutateur /Embedding .

Le serveur d’un objet de classe doit appeler CoRevokeClassObject pour révoquer l’objet de classe (supprimer son inscription) lorsque toutes les conditions suivantes sont remplies :

  • Il n’existe aucune instance de la définition d’objet.
  • Il n’y a aucun verrou sur l’objet de classe.
  • L’application fournissant des services à l’objet de classe n’est pas sous contrôle utilisateur (non visible par l’utilisateur à l’écran).
Une fois l’objet de classe révoqué, lorsque son nombre de références atteint zéro, l’objet de classe peut être libéré, ce qui permet à l’application de quitter. Notez que CoRegisterClassObject appelle IUnknown ::AddRef et CoRevokeClassObject appelle IUnknown ::Release, de sorte que les deux fonctions forment une paire AddRef/Release .

À partir de Windows Server 2003, si une application objet COM est inscrite en tant que service, COM vérifie l’inscription. COM s’assure que l’ID de processus du service, dans le gestionnaire de contrôle de service (SCM), correspond à l’ID de processus du processus d’inscription. Si ce n’est pas le cas, COM échoue à l’inscription. Si l’application objet COM s’exécute dans le compte système sans clé de Registre, COM traite l’identité de l’application d’objets comme utilisateur de lancement.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête combaseapi.h (inclure Objbase.h)
Bibliothèque Ole32.lib
DLL Ole32.dll

Voir aussi

CLSCTX

CoGetClassObject

CoRevokeClassObject

DllGetClassObject

REGCLS