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
, AfxOleRegisterPropertyPageClass
e 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
eafxRegFreeThreading
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 int
parametro 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_RECOMPOSEONRESIZE
OLEMISC_ONLYICONIC
OLEMISC_INSERTNOTREPLACE
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_SETCLIENTSITEFIRST
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 int
parametro nRegFlags non era disponibile. Si noti anche che il afxRegInsertable
flag non è un'opzione valida per le pagine delle proprietà e causerà un'istruzione ASSERT in MFC se è impostata
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