Condividi tramite


Registrazione di controlli OLE

È possibile accedere a controlli OLE, come altri oggetti server OLE, da altre applicazioni che conoscono OLE. Questa operazione viene ottenuta registrando la libreria dei tipi e la classe del controllo.

Le funzioni seguenti consentono di aggiungere e rimuovere la classe, le pagine delle proprietà e la libreria dei tipi del controllo nel database di registrazione di Windows:

Registrazione di controlli OLE

Nome Descrizione
AfxOleRegisterControlClass Aggiunge la classe del controllo al database di registrazione.
AfxOleRegisterPropertyPageClass Aggiunge una pagina delle proprietà del controllo al database di registrazione.
AfxOleRegisterTypeLib Aggiunge la libreria dei tipi del controllo al database di registrazione.
AfxOleUnregisterClass Rimuove una classe di controllo o una classe della pagina delle proprietà dal database di registrazione.
AfxOleUnregisterTypeLib Rimuove la libreria dei tipi del controllo dal database di registrazione.

AfxOleRegisterTypeLib viene in genere chiamato nell'implementazione della DLL di un controllo di DllRegisterServer. Analogamente, AfxOleUnregisterTypeLib viene chiamato da DllUnregisterServer. AfxOleRegisterControlClass, AfxOleRegisterPropertyPageClasse AfxOleUnregisterClass vengono in genere chiamati dalla UpdateRegistry funzione membro della class factory o della pagina delle proprietà di un controllo.

AfxOleRegisterControlClass

Registra la classe di controllo con il database di registrazione di Windows.

BOOL AFXAPI AfxOleRegisterControlClass(
    HINSTANCE hInstance,
    REFCLSID clsid,
    LPCTSTR pszProgID,
    UINT idTypeName,
    UINT idBitmap,
    int nRegFlags,
    DWORD dwMiscStatus,
    REFGUID tlid,
    WORD wVerMajor,
    WORD wVerMinor);

Parametri

Hinstance
Handle di istanza del modulo associato alla classe del controllo.

Clsid
ID univoco della classe del controllo.

pszProgID
ID univoco del programma del controllo.

idTypeName
ID risorsa della stringa contenente un nome di tipo leggibile dall'utente per il controllo.

idBitmap
ID risorsa della bitmap utilizzata per rappresentare il controllo OLE in una barra degli strumenti o una tavolozza.

nRegFlags
Contiene uno o più flag seguenti:

  • afxRegInsertable Consente di visualizzare il controllo nella finestra di dialogo Inserisci oggetto per gli oggetti OLE.

  • afxRegApartmentThreading Imposta il modello di threading nel Registro di sistema su ThreadingModel=Apartment.

  • afxRegFreeThreading Imposta il modello di threading nel Registro di sistema su ThreadingModel=Free.

    È possibile combinare i due flag afxRegApartmentThreading e afxRegFreeThreading impostare ThreadingModel=Both. Per altre informazioni sulla registrazione del modello di threading, vedere InprocServer32 in Windows SDK.

Nota

Nelle versioni MFC precedenti a MFC 4.2, il intparametro nRegFlags era un parametro BOOL, bInsertable, che consentiva o non consentiva l'inserimento del controllo dalla finestra di dialogo Inserisci oggetto.

dwMiscStatus
Contiene uno o più flag di stato seguenti (per una descrizione dei flag, vedere enumerazione OLEMISC in Windows SDK):

  • OLEMISC_RECOMPOedizione Standard ONRESIZE

  • OLEMISC_ONLYICONIC

  • OLEMISC_INedizione Standard RTNOTREPLACE

  • OLEMISC_STATIC

  • OLEMISC_CANTLINKINSIDE

  • OLEMISC_CANLINKBYOLE1

  • OLEMISC_ISLINKOBJECT

  • OLEMISC_INSIDEOUT

  • OLEMISC_ACTIVATEWHENVISIBLE

  • OLEMISC_RENDERINGISDEVICEINDEPENDENT

  • OLEMISC_INVISIBLEATRUNTIME

  • OLEMISC_ALWAYSRUN

  • OLEMISC_ACTSLIKEBUTTON

  • OLEMISC_ACTSLIKELABEL

  • OLEMISC_NOUIACTIVATE

  • OLEMISC_ALIGNABLE

  • OLEMISC_IMEMODE

  • OLEMISC_SIMPLEFRAME

  • OLEMISC_edizione Standard TCLIENTSITEFIRST

tlid
ID univoco della classe del controllo.

wVerMajor
Numero di versione principale della classe del controllo.

wVerMinor
Numero di versione secondaria della classe del controllo.

Valore restituito

Diverso da zero se la classe di controllo è stata registrata; in caso contrario, 0.

Osservazioni:

In questo modo il controllo può essere utilizzato dai contenitori che supportano il controllo OLE. AfxOleRegisterControlClass aggiorna il Registro di sistema con il nome e la posizione del controllo nel sistema e imposta anche il modello di threading supportato dal controllo nel Registro di sistema. Per altre informazioni, vedere La nota tecnica 64, "Threading del modello apartment nei controlli OLE" e Informazioni su processi e thread in Windows SDK.

Esempio

// Member function implementation of class COleObjectFactory::UpdateRegistry
//
BOOL CMyAxCtrl::CMyAxCtrlFactory::UpdateRegistry(BOOL bRegister)
{
   // TODO: Verify that your control follows apartment-model threading rules.
   // Refer to MFC TechNote 64 for more information.
   // If your control does not conform to the apartment-model rules, then
   // you must modify the code below, changing the 6th parameter from
   // afxRegInsertable | afxRegApartmentThreading to afxRegInsertable.

   if (bRegister)
      return AfxOleRegisterControlClass(
          AfxGetInstanceHandle(),
          m_clsid,
          m_lpszProgID,
          IDS_NVC_MFCAXCTL,
          IDB_NVC_MFCAXCTL,
          afxRegInsertable | afxRegApartmentThreading,
          _dwMyOleMisc,
          _tlid,
          _wVerMajor,
          _wVerMinor);
   else
      return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}

L'esempio precedente illustra come AfxOleRegisterControlClass viene chiamato con il flag per l'inserimento e il flag per il modello apartment ORed insieme per creare il sesto parametro:

afxRegInsertable | afxRegApartmentThreading,

Il controllo verrà visualizzato nella finestra di dialogo Inserisci oggetto per i contenitori abilitati e sarà compatibile con il modello apartment. I controlli che supportano il modello apartment devono garantire che i dati delle classi statiche siano protetti da blocchi, in modo che mentre un controllo in un apartment acceda ai dati statici, non venga disabilitato dall'utilità di pianificazione prima del completamento e che un'altra istanza della stessa classe inizi a usare gli stessi dati statici. Tutti gli accessi ai dati statici saranno racchiusi dal codice della sezione critica.

Requisiti

Intestazione afxctl.h

AfxOleRegisterPropertyPageClass

Registra la classe della pagina delle proprietà con il database di registrazione di Windows.

BOOL AFXAPI AfxOleRegisterPropertyPageClass(
   HINSTANCE hInstance,
   REFCLSID  clsid,
   UINT idTypeName,
   int nRegFlags);

Parametri

Hinstance
Handle di istanza del modulo associato alla classe della pagina delle proprietà.

Clsid
ID classe univoco della pagina delle proprietà.

idTypeName
ID risorsa della stringa contenente un nome leggibile dall'utente per la pagina delle proprietà.

nRegFlags
Può contenere il flag :

  • afxRegApartmentThreading Imposta il modello di threading nel Registro di sistema su ThreadingModel = Apartment.

Nota

Nelle versioni MFC precedenti a MFC 4.2 il intparametro nRegFlags non era disponibile. Si noti anche che il afxRegInsertable flag non è un'opzione valida per le pagine delle proprietà e causerà un AS edizione Standard RT in MFC se è impostato

Valore restituito

Diverso da zero se la classe di controllo è stata registrata; in caso contrario, 0.

Osservazioni:

In questo modo, la pagina delle proprietà può essere utilizzata dai contenitori che supportano il controllo OLE. AfxOleRegisterPropertyPageClass aggiorna il Registro di sistema con il nome della pagina delle proprietà e il relativo percorso nel sistema e imposta anche il modello di threading supportato dal controllo nel Registro di sistema. Per altre informazioni, vedere La nota tecnica 64, "Threading del modello apartment nei controlli OLE" e Informazioni su processi e thread in Windows SDK.

Requisiti

Intestazione afxctl.h

AfxOleRegisterTypeLib

Registra la libreria dei tipi con il database di registrazione di Windows e consente l'utilizzo della libreria dei tipi da parte di altri contenitori che supportano i controlli OLE.

BOOL AfxOleRegisterTypeLib(
    HINSTANCE hInstance,
    REFGUID tlid,
    LPCTSTR pszFileName = NULL,
    LPCTSTR pszHelpDir  = NULL);

Parametri

Hinstance
Handle dell'istanza dell'applicazione associata alla libreria dei tipi.

tlid
ID univoco della libreria dei tipi.

pszFileName
Punta al nome file facoltativo di un file localizzato della libreria dei tipi (.TLB) per il controllo.

pszHelpDir
Nome della directory in cui è disponibile il file della Guida della libreria dei tipi. Se NULL, si presuppone che il file della Guida si trova nella stessa directory della libreria dei tipi stessa.

Valore restituito

Diverso da zero se la libreria dei tipi è stata registrata; in caso contrario, 0.

Osservazioni:

Questa funzione aggiorna il Registro di sistema con il nome della libreria dei tipi e il relativo percorso nel sistema.

Esempio

// Type library guid definition.
const GUID CDECL BASED_CODE _tlid =
{ 0x77E58ED8, 0xA2C0, 0x4C13, { 0xB6, 0xC1, 0xBA, 0xD1, 0x19, 0xAF, 0xE3, 0xF1 } };

 

// Registers type library and the interfaces
// in it, afxctl.h needs to be included
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);


// CMFCAutomation.tlb should be in the same directory as exe module.
// last param can be null if help file associated w/ tlb is in same dir as .tlb
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid,
   _T("CMFCAutomation.tlb"), NULL))
{
   return ResultFromScode(SELFREG_E_TYPELIB);
}

Requisiti

Intestazione afxdisp.h

AfxOleUnregisterClass

Rimuove la voce della classe della pagina delle proprietà o del controllo dal database di registrazione di Windows.

BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);

Parametri

Clsid
ID classe univoco della pagina del controllo o delle proprietà.

pszProgID
ID programma univoco della pagina dei controlli o delle proprietà.

Valore restituito

Diverso da zero se la classe del controllo o della pagina delle proprietà è stata annullata correttamente; in caso contrario, 0.

Requisiti

Intestazione afxctl.h

AfxOleUnregisterTypeLib

Chiamare questa funzione per rimuovere la voce della libreria dei tipi dal database di registrazione di Windows.

BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);

Parametri

tlID
ID univoco della libreria dei tipi.

Valore restituito

Diverso da zero se la libreria dei tipi è stata annullata correttamente la registrazione; in caso contrario, 0.

Esempio

// Type library GUID, corresponds to the uuid attribute of the library
// section in the .odl file.
const GUID CDECL BASED_CODE _tlid =
    {0xA44774E8, 0xAE00, 0x451F, {0x96, 0x1D, 0xC7, 0xD2, 0xD2, 0x58, 0xA0, 0x75}};

// Type library major version number, number on the left of decimal
// point, in version attribute of the library section in .odl file.
const WORD _wVerMajor = 1;

// Type library minor version number, number on the right of decimal
// point, in version attribute of the library section in .odl file.
const WORD _wVerMinor = 0;

STDAPI DllUnregisterServer(void)
{
   AFX_MANAGE_STATE(_afxModuleAddrThis);

   if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
      return ResultFromScode(SELFREG_E_TYPELIB);

   if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
      return ResultFromScode(SELFREG_E_CLASS);

   return NOERROR;
}

Requisiti

Intestazione afxdisp.h

Vedi anche

Macro e globali