Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
afxRegInsertableTillåter att kontrollen visas i dialogrutan Infoga objekt för OLE-objekt.afxRegApartmentThreadingAnger trådmodellen i registret till ThreadingModel=Apartment.afxRegFreeThreadingAnger trådmodellen i registret till ThreadingModel=Free.Du kan kombinera de två flaggorna
afxRegApartmentThreadingochafxRegFreeThreadingange 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:
-
afxRegApartmentThreadingAnger 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