Share via


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 DllRegisterServereiner Steuerelement-DLL aufgerufen. AfxOleUnregisterTypeLib Ebenso wird von DllUnregisterServer. AfxOleRegisterControlClass, AfxOleRegisterPropertyPageClassund 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 und afxRegFreeThreading ThreadingModel=Both festlegen. Weitere Informationen zur Threadingmodellregistrierung finden Sie unter InprocServer32 im Windows SDK.

Hinweis

In MFC-Versionen vor MFC 4.2 war der intnRegFlags-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 intnRegFlags-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

Siehe auch

Makros und Globalen