Registrieren des OLE-Steuerelements
AUF OLE-Steuerelemente wie andere OLE-Serverobjekte kann von anderen OLE-fähigen Anwendungen zugegriffen werden. Dies wird durch Registrieren der Typbibliothek und -klasse des Steuerelements erreicht.
Mit den folgenden Funktionen können Sie die Klasse, Eigenschaftenseiten und Typbibliothek des Steuerelements in der Windows-Registrierungsdatenbank hinzufügen und entfernen:
Registrieren des OLE-Steuerelements
Name | Beschreibung |
---|---|
AfxOleRegisterControlClass | Fügt der Registrierungsdatenbank die Klasse des Steuerelements hinzu. |
AfxOleRegisterPropertyPageClass | Fügt der Registrierungsdatenbank eine Steuerelementeigenschaftsseite hinzu. |
AfxOleRegisterTypeLib | Fügt der Registrierungsdatenbank die Typbibliothek des Steuerelements hinzu. |
AfxOleUnregisterClass | Entfernt eine Steuerelementklasse oder eine Eigenschaftenseitenklasse aus der Registrierungsdatenbank. |
AfxOleUnregisterTypeLib | Entfernt die Typbibliothek des Steuerelements aus der Registrierungsdatenbank. |
AfxOleRegisterTypeLib
wird in der Regel in der Implementierung DllRegisterServer
einer Steuerelement-DLL aufgerufen. AfxOleUnregisterTypeLib
Ebenso wird von DllUnregisterServer
. AfxOleRegisterControlClass
, AfxOleRegisterPropertyPageClass
und AfxOleUnregisterClass
werden in der Regel von der UpdateRegistry
Memberfunktion der Klassenfactory oder Eigenschaftenseite eines Steuerelements aufgerufen.
AfxOleRegisterControlClass
Registriert die Steuerelementklasse mit der Windows-Registrierungsdatenbank.
BOOL AFXAPI AfxOleRegisterControlClass(
HINSTANCE hInstance,
REFCLSID clsid,
LPCTSTR pszProgID,
UINT idTypeName,
UINT idBitmap,
int nRegFlags,
DWORD dwMiscStatus,
REFGUID tlid,
WORD wVerMajor,
WORD wVerMinor);
Parameter
hInstance
Das Instanzhandle des Moduls, das der Steuerelementklasse zugeordnet ist.
clsid
Die eindeutige Klassen-ID des Steuerelements.
pszProgID
Die eindeutige Programm-ID des Steuerelements.
idTypeName
Die Ressourcen-ID der Zeichenfolge, die einen benutzerdefinierten Typnamen für das Steuerelement enthält.
idBitmap
Die Ressourcen-ID der Bitmap, die zum Darstellen des OLE-Steuerelements in einer Symbolleiste oder Palette verwendet wird.
nRegFlags
Enthält ein oder mehrere der folgenden Flags:
afxRegInsertable
Ermöglicht das Anzeigen des Steuerelements im Dialogfeld "Objekt einfügen" für OLE-Objekte.afxRegApartmentThreading
Legt das Threadingmodell in der Registrierung auf ThreadingModel=Apartment fest.afxRegFreeThreading
Legt das Threadingmodell in der Registrierung auf ThreadingModel=Free fest.Sie können die beiden Flags
afxRegApartmentThreading
kombinieren undafxRegFreeThreading
ThreadingModel=Both festlegen. Weitere Informationen zur Threadingmodellregistrierung finden Sie unter InprocServer32 im Windows SDK.
Hinweis
In MFC-Versionen vor MFC 4.2 war der int
nRegFlags-Parameter ein BOOL-Parameter, "bInsertable", der das Steuerelement im Dialogfeld "Objekt einfügen" zugelassen oder nicht eingefügt hat.
dwMiscStatus
Enthält mindestens eins der folgenden Statuskennzeichnungen (eine Beschreibung der Flags finden Sie unter OLEMISC-Aufzählung im 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
Die eindeutige ID der Steuerelementklasse.
wVerMajor
Die Hauptversionsnummer der Steuerelementklasse.
wVerMinor
Die Nebenversionsnummer der Steuerelementklasse.
Rückgabewert
Nonzero, wenn die Steuerelementklasse registriert wurde; andernfalls 0.
Hinweise
Auf diese Weise kann das Steuerelement von Containern verwendet werden, die ole-steuerelementfähig sind. AfxOleRegisterControlClass
aktualisiert die Registrierung mit dem Namen und speicherort des Steuerelements auf dem System und legt außerdem das Threadingmodell fest, das das Steuerelement in der Registrierung unterstützt. Weitere Informationen finden Sie unter Technical Note 64, "Apartmentmodellthreading in OLE-Steuerelementen" und Informationen zu Prozessen und Threads im Windows SDK.
Beispiel
// 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);
}
Im obigen Beispiel wird veranschaulicht, wie AfxOleRegisterControlClass
mit der Kennzeichnung für einzufügende Elemente und das Flag für das Apartmentmodell zusammen aufgerufen wird, um den sechsten Parameter zu erstellen:
afxRegInsertable | afxRegApartmentThreading,
Das Steuerelement wird im Dialogfeld "Objekt einfügen" für aktivierte Container angezeigt, und es ist apartmentmodellfähig. Modellfähige Apartmentsteuerelemente müssen sicherstellen, dass statische Klassendaten durch Sperren geschützt sind. Während ein Steuerelement in einer Wohnung auf die statischen Daten zugreift, wird sie nicht vom Scheduler deaktiviert, bevor sie abgeschlossen ist, und eine andere Instanz derselben Klasse beginnt mit der Verwendung derselben statischen Daten. Alle Zugriffe auf die statischen Daten werden von kritischem Abschnittscode umgeben.
Anforderungen
Header afxctl.h
AfxOleRegisterPropertyPageClass
Registriert die Eigenschaftenseitenklasse mit der Windows-Registrierungsdatenbank.
BOOL AFXAPI AfxOleRegisterPropertyPageClass(
HINSTANCE hInstance,
REFCLSID clsid,
UINT idTypeName,
int nRegFlags);
Parameter
hInstance
Das Instanzhandle des Moduls, das der Eigenschaftenseitenklasse zugeordnet ist.
clsid
Die eindeutige Klassen-ID der Eigenschaftenseite.
idTypeName
Die Ressourcen-ID der Zeichenfolge, die einen benutzerdefinierten Namen für die Eigenschaftenseite enthält.
nRegFlags
Kann die Kennzeichnung enthalten:
afxRegApartmentThreading
Legt das Threadingmodell in der Registrierung auf ThreadingModel = Apartment fest.
Hinweis
In MFC-Versionen vor MFC 4.2 war der int
nRegFlags-Parameter nicht verfügbar. Beachten Sie auch, dass das afxRegInsertable
Flag keine gültige Option für Eigenschaftenseiten ist und eine ASSERTION in MFC verursacht, wenn sie festgelegt ist.
Rückgabewert
Nonzero, wenn die Steuerelementklasse registriert wurde; andernfalls 0.
Hinweise
Auf diese Weise kann die Eigenschaftenseite von Containern verwendet werden, die ole-steuerelementfähig sind. AfxOleRegisterPropertyPageClass
aktualisiert die Registrierung mit dem Eigenschaftenseitennamen und seinem Speicherort im System und legt außerdem das Threadingmodell fest, das das Steuerelement in der Registrierung unterstützt. Weitere Informationen finden Sie unter Technical Note 64, "Apartmentmodellthreading in OLE-Steuerelementen" und Informationen zu Prozessen und Threads im Windows SDK.
Anforderungen
Header afxctl.h
AfxOleRegisterTypeLib
Registriert die Typbibliothek mit der Windows-Registrierungsdatenbank und ermöglicht es der Typbibliothek, von anderen Containern zu verwenden, die ole-steuerelementfähig sind.
BOOL AfxOleRegisterTypeLib(
HINSTANCE hInstance,
REFGUID tlid,
LPCTSTR pszFileName = NULL,
LPCTSTR pszHelpDir = NULL);
Parameter
hInstance
Das Instanzhandle der Anwendung, die der Typbibliothek zugeordnet ist.
tlid
Die eindeutige ID der Typbibliothek.
pszFileName
Verweist auf den optionalen Dateinamen einer lokalisierten Typbibliothek (). TLB)-Datei für das Steuerelement.
pszHelpDir
Der Name des Verzeichnisses, in dem die Hilfedatei für die Typbibliothek gefunden werden kann. Wenn NULL, wird davon ausgegangen, dass sich die Hilfedatei im selben Verzeichnis wie die Typbibliothek selbst befindet.
Rückgabewert
Nonzero, wenn die Typbibliothek registriert wurde; andernfalls 0.
Hinweise
Diese Funktion aktualisiert die Registrierung mit dem Namen der Typbibliothek und seinem Speicherort im System.
Beispiel
// 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);
}
Anforderungen
Header afxdisp.h
AfxOleUnregisterClass
Entfernt den Eintrag der Steuerelement- oder Eigenschaftenseitenklasse aus der Windows-Registrierungsdatenbank.
BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);
Parameter
clsID
Die eindeutige Klassen-ID des Steuerelements oder der Eigenschaftenseite.
pszProgID
Die eindeutige Programm-ID des Steuerelements oder der Eigenschaftenseite.
Rückgabewert
Nonzero, wenn die Registrierung der Steuerelement- oder Eigenschaftenseitenklasse erfolgreich aufgehoben wurde; andernfalls 0.
Anforderungen
Header afxctl.h
AfxOleUnregisterTypeLib
Rufen Sie diese Funktion auf, um den Typbibliothekseintrag aus der Windows-Registrierungsdatenbank zu entfernen.
BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);
Parameter
tlID
Die eindeutige ID der Typbibliothek.
Rückgabewert
Nonzero, wenn die Registrierung der Typbibliothek erfolgreich aufgehoben wurde; andernfalls 0.
Beispiel
// 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;
}
Anforderungen
Header afxdisp.h