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 DllUnregisterServer
metodę . AfxOleRegisterControlClass
, AfxOleRegisterPropertyPageClass
i 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
iafxRegFreeThreading
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