Registrera OLE-kontroller

Anmärkning

Biblioteket För Microsoft Foundation-klasser (MFC) stöds fortfarande. Vi lägger dock inte längre till funktioner eller uppdaterar dokumentationen.

OLE-kontroller, liksom andra OLE-serverobjekt, kan nås av andra OLE-medvetna program. Detta uppnås genom att registrera kontrollens typbibliotek och -klass.

Med följande funktioner kan du lägga till och ta bort kontrollens klass, egenskapssidor och typbibliotek i Windows-registreringsdatabasen:

Registrera OLE-kontroller

Namn Description
AfxOleRegisterControlClass Lägger till kontrollens klass i registreringsdatabasen.
AfxOleRegisterPropertyPageClass Lägger till en kontrollegenskapssida i registreringsdatabasen.
AfxOleRegisterTypeLib Lägger till kontrollens typbibliotek i registreringsdatabasen.
AfxOleUnregisterClass Tar bort en kontrollklass eller en egenskapssidaklass från registreringsdatabasen.
AfxOleUnregisterTypeLib Tar bort kontrollens typbibliotek från registreringsdatabasen.

AfxOleRegisterTypeLib anropas vanligtvis i en kontroll-DLL-implementering av DllRegisterServer. AfxOleUnregisterTypeLib På samma sätt anropas av DllUnregisterServer. AfxOleRegisterControlClass, AfxOleRegisterPropertyPageClassoch AfxOleUnregisterClass anropas vanligtvis av UpdateRegistry medlemsfunktionen på en kontrolls klassfabrik eller egenskapssida.

AfxOleRegisterControlClass

Registrerar kontrollklassen med Windows-registreringsdatabasen.

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

Parameterar

hInstance
Instanshandtaget för modulen som är associerad med kontrollklassen.

clsid
Kontrollens unika klass-ID.

pszProgID
Kontrollens unika program-ID.

idTypeName
Resurs-ID:t för strängen som innehåller ett användarläsbart typnamn för kontrollen.

idBitmap
Resurs-ID:t för bitmappen som används för att representera OLE-kontrollen i ett verktygsfält eller en palett.

nRegFlags
Innehåller en eller flera av följande flaggor:

  • afxRegInsertable Tillåter att kontrollen visas i dialogrutan Infoga objekt för OLE-objekt.

  • afxRegApartmentThreading Anger trådmodellen i registret till ThreadingModel=Apartment.

  • afxRegFreeThreading Anger trådmodellen i registret till ThreadingModel=Free.

    Du kan kombinera de två flaggorna afxRegApartmentThreading och afxRegFreeThreading ange ThreadingModel=Båda. Mer information om registrering av trådmodeller finns i InprocServer32 i Windows SDK.

Anmärkning

I MFC-versioner före MFC 4.2 int var parametern nRegFlags en BOOL-parameter, bInsertable, som tillät eller tillät inte att kontrollen infogades från dialogrutan Infoga objekt.

dwMiscStatus
Innehåller en eller flera av följande statusflaggor (en beskrivning av flaggorna finns i OLEMISC-uppräkning i 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
Kontrollklassens unika ID.

wVerMajor
Kontrollklassens huvudversionsnummer.

wVerMinor
Delversionsnumret för kontrollklassen.

Returvärde

Nonzero om kontrollklassen har registrerats. annars 0.

Anmärkningar

Detta gör att kontrollen kan användas av containrar som är ole-kontrollmedvetna. AfxOleRegisterControlClass uppdaterar registret med kontrollens namn och plats i systemet och anger även den trådmodell som kontrollen stöder i registret. Mer information finns i Technical Note 64, "Apartment-Model Threading in OLE Controls" och Om processer och trådar i Windows SDK.

Example

// 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);
}

Exemplet ovan visar hur AfxOleRegisterControlClass anropas med flaggan för infogad och flaggan för lägenhetsmodellen ORed tillsammans för att skapa den sjätte parametern:

afxRegInsertable | afxRegApartmentThreading,

Kontrollen visas i dialogrutan Infoga objekt för aktiverade containrar och är lägenhetsmodellmedveten. Kontroller som är medvetna om lägenhetsmodeller måste se till att statiska klassdata skyddas av lås, så att även om en kontroll i en lägenhet har åtkomst till statiska data inaktiveras den inte av schemaläggaren innan den är klar, och en annan instans av samma klass börjar använda samma statiska data. Alla åtkomster till statiska data omges av kritisk avsnittskod.

Kravspecifikation

Sidhuvud afxctl.h

AfxOleRegisterPropertyPageClass

Registrerar egenskapssidans klass med Windows-registreringsdatabasen.

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

Parameterar

hInstance
Instanshandtaget för modulen som är associerad med egenskapssidans klass.

clsid
Egenskapssidans unika klass-ID.

idTypeName
Resurs-ID för strängen som innehåller ett användarläsbart namn för egenskapssidan.

nRegFlags
Kan innehålla flaggan:

  • afxRegApartmentThreading Anger trådmodellen i registret till ThreadingModel = Apartment.

Anmärkning

I MFC-versioner före MFC 4.2 var parametern intnRegFlags inte tillgänglig. Observera också att afxRegInsertable flaggan inte är ett giltigt alternativ för egenskapssidor och orsakar en ASSERT i MFC om den anges

Returvärde

Nonzero om kontrollklassen har registrerats. annars 0.

Anmärkningar

På så sätt kan egenskapssidan användas av containrar som är ole-kontrollmedvetna. AfxOleRegisterPropertyPageClass uppdaterar registret med namnet på egenskapssidan och dess plats i systemet och anger även den trådmodell som kontrollen stöder i registret. Mer information finns i Technical Note 64, "Apartment-Model Threading in OLE Controls" och Om processer och trådar i Windows SDK.

Kravspecifikation

Sidhuvud afxctl.h

AfxOleRegisterTypeLib

Registrerar typbiblioteket med Windows-registreringsdatabasen och tillåter att typbiblioteket används av andra containrar som är OLE-kontrollmedvetna.

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

Parameterar

hInstance
Instanshandtaget för programmet som är associerat med typbiblioteket.

tlid
Det unika ID:t för typbiblioteket.

pszFileName
Pekar på det valfria filnamnet för ett lokaliserat typbibliotek (. TLB)-fil för kontrollen.

pszHelpDir
Namnet på katalogen där hjälpfilen för typbiblioteket finns. Om null antas hjälpfilen finnas i samma katalog som själva typbiblioteket.

Returvärde

Nonzero om typbiblioteket har registrerats. annars 0.

Anmärkningar

Den här funktionen uppdaterar registret med typbibliotekets namn och dess plats i systemet.

Example

// 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);
}

Kravspecifikation

Sidhuvud afxdisp.h

AfxOleUnregisterClass

Tar bort kontrollen eller egenskapssidans klasspost från Windows-registreringsdatabasen.

BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);

Parameterar

Clsid
Det unika klass-ID:t för kontroll- eller egenskapssidan.

pszProgID
Det unika program-ID:t för kontroll- eller egenskapssidan.

Returvärde

Nonzero om kontroll- eller egenskapssidans klass har avregistrerats. annars 0.

Kravspecifikation

Sidhuvud afxctl.h

AfxOleUnregisterTypeLib

Anropa den här funktionen för att ta bort typbiblioteksposten från Windows-registreringsdatabasen.

BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);

Parameterar

tlID
Det unika ID:t för typbiblioteket.

Returvärde

Nonzero om typbiblioteket har avregistrerats. annars 0.

Example

// 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;
}

Kravspecifikation

Sidhuvud afxdisp.h

Se även

Makro och globala variabler