Udostępnij za pośrednictwem


Rejestrowanie formantów OLE

Do kontrolek OLE, takich jak inne obiekty serwera OLE, można uzyskiwać dostęp do innych aplikacji obsługujących ole. Jest to osiągane przez zarejestrowanie biblioteki typów i klasy kontrolki.

Następujące funkcje umożliwiają dodawanie i usuwanie klasy kontrolki, stron właściwości i biblioteki typów w bazie danych rejestracji systemu Windows:

Rejestrowanie formantów OLE

Nazwa/nazwisko opis
AfxOleRegisterControlClass Dodaje klasę kontrolki do bazy danych rejestracji.
AfxOleRegisterPropertyPageClass Dodaje stronę właściwości kontrolki do bazy danych rejestracji.
AfxOleRegisterTypeLib Dodaje bibliotekę typów kontrolki do bazy danych rejestracji.
AfxOleUnregisterClass Usuwa klasę kontrolki lub klasę strony właściwości z bazy danych rejestracji.
AfxOleUnregisterTypeLib Usuwa bibliotekę typów kontrolki z bazy danych rejestracji.

AfxOleRegisterTypeLib jest zwykle wywoływana w implementacji biblioteki DLL kontrolki DllRegisterServer. AfxOleUnregisterTypeLib Podobnie funkcja jest wywoływana przez DllUnregisterServermetodę . AfxOleRegisterControlClass, AfxOleRegisterPropertyPageClassi AfxOleUnregisterClass są zwykle wywoływane przez UpdateRegistry funkcję składową fabryki klas lub strony właściwości kontrolki.

AfxOleRegisterControlClass

Rejestruje klasę sterowania w bazie danych rejestracji systemu Windows.

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

Parametry

hInstance
Dojście wystąpienia modułu skojarzonego z klasą sterowania.

clsid
Unikatowy identyfikator klasy kontrolki.

pszProgID
Unikatowy identyfikator programu kontrolki.

idTypeName
Identyfikator zasobu ciągu, który zawiera nazwę typu czytelnego dla użytkownika dla kontrolki.

idBitmap
Identyfikator zasobu mapy bitowej używanej do reprezentowania kontrolki OLE na pasku narzędzi lub palecie.

nRegFlags
Zawiera co najmniej jedną z następujących flag:

  • afxRegInsertable Umożliwia wyświetlenie kontrolki w oknie dialogowym Wstawianie obiektu dla obiektów OLE.

  • afxRegApartmentThreading Ustawia model wątków w rejestrze na ThreadingModel=Apartment.

  • afxRegFreeThreading Ustawia model wątków w rejestrze na ThreadingModel=Free.

    Możesz połączyć dwie flagi afxRegApartmentThreading i afxRegFreeThreading ustawić element ThreadingModel=Both. Aby uzyskać więcej informacji na temat rejestracji modelu wątkowego, zobacz InprocServer32 w zestawie Windows SDK.

Uwaga

W wersjach MFC przed MFC 4.2 int parametr nRegFlags był parametrem BOOL, bInsertable, który zezwalał lub nie zezwalał na wstawianie kontrolki z okna dialogowego Wstawianie obiektu.

dwMiscStatus
Zawiera co najmniej jedną z następujących flag stanu (aby uzyskać opis flag, zobacz wyliczenie OLEMISC w zestawie 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
Unikatowy identyfikator klasy kontrolnej.

wVerMajor
Numer wersji głównej klasy kontrolnej.

wVerMinor
Numer wersji pomocniczej klasy kontrolnej.

Wartość zwracana

Nonzero, jeśli klasa kontrolna została zarejestrowana; w przeciwnym razie 0.

Uwagi

Dzięki temu kontrolka może być używana przez kontenery obsługujące kontrolkę OLE. AfxOleRegisterControlClass aktualizuje rejestr przy użyciu nazwy i lokalizacji kontrolki w systemie, a także ustawia model wątków, który obsługuje kontrolka w rejestrze. Aby uzyskać więcej informacji, zobacz Technical Note 64, "Apartment-Model Threading in OLE Controls", and About Processes and Threads in the Windows SDK (Informacje o procesach i wątkach w zestawie Windows SDK).

Przykład

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

W powyższym przykładzie pokazano, jak AfxOleRegisterControlClass jest wywoływany z flagą do wstawiania i flagą modelu apartamentowego ORed razem w celu utworzenia szóstego parametru:

afxRegInsertable | afxRegApartmentThreading,

Kontrolka zostanie wyświetlona w oknie dialogowym Wstawianie obiektu dla kontenerów z włączoną obsługą i będzie uwzględniać model apartamentów. Kontrolki obsługujące model apartamentów muszą mieć pewność, że dane klasy statycznej są chronione przez blokady, dzięki czemu kontrolka w jednym mieszkaniu uzyskuje dostęp do danych statycznych, nie jest wyłączona przez harmonogram przed jego zakończeniem, a inne wystąpienie tej samej klasy rozpoczyna korzystanie z tych samych danych statycznych. Wszystkie dostępy do danych statycznych będą otoczone kodem sekcji krytycznej.

Wymagania

Nagłówek afxctl.h

AfxOleRegisterPropertyPageClass

Rejestruje klasę strony właściwości w bazie danych rejestracji systemu Windows.

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

Parametry

hInstance
Dojście wystąpienia modułu skojarzonego z klasą strony właściwości.

clsid
Unikatowy identyfikator klasy strony właściwości.

idTypeName
Identyfikator zasobu ciągu, który zawiera nazwę czytelną dla strony właściwości.

nRegFlags
Może zawierać flagę:

  • afxRegApartmentThreading Ustawia model wątkowania w rejestrze na ThreadingModel = Apartment.

Uwaga

W wersjach MFC wcześniejszych niż MFC 4.2 int parametr nRegFlags nie był dostępny. Należy również pamiętać, że flaga afxRegInsertable nie jest prawidłową opcją dla stron właściwości i spowoduje asercję w MFC, jeśli jest ustawiona

Wartość zwracana

Nonzero, jeśli klasa kontrolna została zarejestrowana; w przeciwnym razie 0.

Uwagi

Dzięki temu strona właściwości może być używana przez kontenery obsługujące kontrolkę OLE. AfxOleRegisterPropertyPageClass aktualizuje rejestr z nazwą strony właściwości i jego lokalizacją w systemie, a także ustawia model wątków, który obsługuje kontrolka w rejestrze. Aby uzyskać więcej informacji, zobacz Technical Note 64, "Apartment-Model Threading in OLE Controls", and About Processes and Threads in the Windows SDK (Informacje o procesach i wątkach w zestawie Windows SDK).

Wymagania

Nagłówek afxctl.h

AfxOleRegisterTypeLib

Rejestruje bibliotekę typów w bazie danych rejestracji systemu Windows i umożliwia używanie biblioteki typów przez inne kontenery obsługujące kontrolkę OLE.

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

Parametry

hInstance
Dojście wystąpienia aplikacji skojarzonej z biblioteką typów.

tlid
Unikatowy identyfikator biblioteki typów.

pszFileName
Wskazuje opcjonalną nazwę pliku zlokalizowanej biblioteki typów (. Plik TLB) dla kontrolki.

pszHelpDir
Nazwa katalogu, w którym można znaleźć plik pomocy dla biblioteki typów. Jeśli wartość NULL, zakłada się, że plik pomocy znajduje się w tym samym katalogu co sama biblioteka typów.

Wartość zwracana

Nonzero, jeśli biblioteka typów została zarejestrowana; w przeciwnym razie 0.

Uwagi

Ta funkcja aktualizuje rejestr przy użyciu nazwy biblioteki typów i jej lokalizacji w systemie.

Przykład

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

Wymagania

Nagłówek afxdisp.h

AfxOleUnregisterClass

Usuwa wpis klasy strony kontrolki lub właściwości z bazy danych rejestracji systemu Windows.

BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);

Parametry

clsID
Unikatowy identyfikator klasy kontrolki lub strony właściwości.

pszProgID
Unikatowy identyfikator programu kontrolki lub strony właściwości.

Wartość zwracana

Nonzero, jeśli klasa strony kontrolki lub właściwości została pomyślnie wyrejestrowana; w przeciwnym razie 0.

Wymagania

Nagłówek afxctl.h

AfxOleUnregisterTypeLib

Wywołaj tę funkcję, aby usunąć wpis biblioteki typów z bazy danych rejestracji systemu Windows.

BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);

Parametry

tlID
Unikatowy identyfikator biblioteki typów.

Wartość zwracana

Nonzero, jeśli biblioteka typów została pomyślnie wyrejestrowana; w przeciwnym razie 0.

Przykład

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

Wymagania

Nagłówek afxdisp.h

Zobacz też

Makra i globalne