Condividi tramite


Funzione CoRegisterClassObject (combaseapi.h)

Registra un oggetto classe EXE con OLE in modo che altre applicazioni possano connettersi.

Sintassi

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

Parametri

[in] rclsid

CLSID da registrare.

[in] pUnk

Puntatore all'interfaccia IUnknown nell'oggetto classe la cui disponibilità viene pubblicata.

[in] dwClsContext

Contesto in cui eseguire il codice eseguibile. Per informazioni su questi valori di contesto, vedere l'enumerazione CLSCTX .

[in] flags

Indica la modalità di creazione delle connessioni all'oggetto classe. Per informazioni su questi flag, vedere l'enumerazione REGCLS .

[out] lpdwRegister

Puntatore a un valore che identifica l'oggetto di classe registrato; usato successivamente dalla funzione CoRevokeClassObject per revocare la registrazione.

Valore restituito

Questa funzione può restituire i valori restituiti standard E_INVALIDARG, E_OUTOFMEMORY e E_UNEXPECTED, nonché i valori seguenti.

Codice restituito Descrizione
S_OK
L'oggetto classe è stato registrato correttamente.

Commenti

Le applicazioni dell'oggetto EXE devono chiamare CoRegisterClassObject all'avvio. Può anche essere usato per registrare oggetti interni da usare dallo stesso exe o da altri codici (ad esempio DLL) usati dall'EXE. Solo le applicazioni dell'oggetto EXE chiamano CoRegisterClassObject. I gestori oggetti o le applicazioni dell'oggetto DLL non chiamano questa funzione, ma devono implementare ed esportare la funzione DllGetClassObject .

All'avvio, un'applicazione dell'oggetto EXE a più usi deve creare un oggetto classe (con l'interfaccia IClassFactory in esso) e chiamare CoRegisterClassObject per registrare l'oggetto classe. Le applicazioni oggetto che supportano diverse classi ,ad esempio più tipi di oggetti incorporabili, devono allocare e registrare un oggetto classe diverso per ogni oggetto.

Più registrazioni dello stesso oggetto di classe sono indipendenti e non generano un errore. Ogni registrazione successiva restituisce una chiave univoca in lpdwRegister.

Più applicazioni MDI (Document Interface) devono registrare gli oggetti di classe. Le applicazioni SDI (Single Document Interface) devono registrare gli oggetti di classe solo se possono essere avviate tramite l'opzione /Embedding .

Il server per un oggetto di classe deve chiamare CoRevokeClassObject per revocare l'oggetto classe (rimuovere la relativa registrazione) quando tutte le operazioni seguenti sono vere:

  • Non sono presenti istanze esistenti della definizione dell'oggetto.
  • Non sono presenti blocchi sull'oggetto classe.
  • L'applicazione che fornisce servizi all'oggetto classe non è sotto il controllo utente (non visibile all'utente nella visualizzazione).
Dopo la revoca dell'oggetto di classe, quando il numero di riferimenti raggiunge zero, l'oggetto classe può essere rilasciato, consentendo all'applicazione di uscire. Si noti che CoRegisterClassObject chiama IUnknown::AddRef e CoRevokeClassObject chiama IUnknown::Release, quindi le due funzioni formano una coppia AddRef/Release.

A partire da Windows Server 2003, se un'applicazione dell'oggetto COM viene registrata come servizio, COM verifica la registrazione. COM assicura che l'ID processo del servizio, nella gestione del controllo del servizio (SCM), corrisponda all'ID processo del processo di registrazione. In caso contrario, COM ha esito negativo nella registrazione. Se l'applicazione dell'oggetto COM viene eseguita nell'account di sistema senza chiave del Registro di sistema, COM considera l'identità dell'applicazione oggetti come avvio dell'utente.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione combaseapi.h (include Objbase.h)
Libreria Ole32.lib
DLL Ole32.dll

Vedi anche

CLSCTX

CoGetClassObject

CoRevokeClassObject

Dllgetclassobject

REGCLS