Licenties en IClassFactory2
De IClassFactory interface op een klasseobject biedt het basismechanisme voor het maken van objecten van COM. Met IClassFactorykan een server het maken van objecten op een computer beheren. De implementatie van de methode IClassFactory::CreateInstance kan het maken van objecten toestaan of weigeren op basis van het bestaan van een computerlicentie. Een machinelicentie is een stukje informatie dat losstaat van de toepassing die op een computer aanwezig is om aan te geven dat de software is geïnstalleerd vanaf een geldige bron, zoals de installatieschijven van de leverancier. Als de machinelicentie niet bestaat, kan de server het maken van objecten weigeren. Machinelicenties voorkomt piraterij in gevallen waarin een gebruiker probeert de software van de ene computer naar de andere te kopiëren, omdat de licentiegegevens niet worden gekopieerd met de software en de computer die de kopie ontvangt, geen licentie heeft.
In een software-industrie voor onderdelen hebben leveranciers echter een nauwkeuriger niveau van controle over licenties nodig. Naast machinelicentiebeheer moet een leverancier toestaan dat sommige clients een onderdeelobject maken terwijl andere clients dezelfde mogelijkheid weigeren. Hiervoor moet de clienttoepassing een licentiesleutel van het onderdeel verkrijgen terwijl de clienttoepassing nog in ontwikkeling is. De clienttoepassing gebruikt de licentiesleutel tijdens runtime om objecten te maken op een niet-gelicentieerde machine.
Als een leverancier bijvoorbeeld een bibliotheek met besturingselementen biedt aan ontwikkelaars, heeft de ontwikkelaar die de bibliotheek koopt een volledige machinelicentie, zodat de objecten op de ontwikkelcomputer kunnen worden gemaakt. De ontwikkelaar kan vervolgens een clienttoepassing bouwen op de gelicentieerde computer met een of meer besturingselementen. Wanneer de resulterende clienttoepassing wordt uitgevoerd op een andere computer, moeten de besturingselementen die in de clienttoepassing worden gebruikt, worden gemaakt op de andere computer, zelfs als die machine geen machinelicentie heeft voor de besturingselementen van de oorspronkelijke leverancier.
De interface IClassFactory2 biedt dit niveau van controle. Als u licenties op basis van sleutels voor een bepaald onderdeel wilt toestaan, implementeert u IClassFactory2- op het klassefactory-object voor dat onderdeel. IClassFactory2is afgeleid van IClassFactory-, dus door IClassFactory2-te implementeren, voldoet het klassefactoryobject aan de basisvereisten van COM.
Als u een gelicentieerd onderdeel wilt opnemen in uw clienttoepassing, gebruikt u de volgende methoden in IClassFactory2-:
- De methode GetLicInfo vult een LICINFO- structuur in met informatie die het licentiegedrag van de klassefabriek beschrijft. De klassefabriek kan bijvoorbeeld licentiesleutels opgeven voor run-time licenties als het fRunTimeKeyAvail- lid TRUE-is.
- De methode RequestLicKey biedt een licentiesleutel voor het onderdeel. Er moet een machinelicentie beschikbaar zijn wanneer de client deze methode aanroept.
- De methode CreateInstanceLic maakt een exemplaar van het gelicentieerde onderdeel als de parameter voor de licentiesleutel (BSTRÂ bstrKey) geldig is.
Notitie
In de typegegevens, gebruikt een onderdeel het kenmerk 'gelicentieerd' voor het markeren van de coklasse die licenties ondersteunt via IClassFactory2.
Eerst hebt u een afzonderlijk ontwikkelhulpprogramma nodig dat ook een client van het gelicentieerde onderdeel is. Het doel van dit hulpprogramma is om de runtimelicentiesleutel te verkrijgen en op te slaan in uw clienttoepassing. Dit hulpprogramma wordt alleen uitgevoerd op een computer met een machinelicentie voor het onderdeel. Het tool roept de GetLicInfo-- en RequestLicKey--methoden aan om de runtime-licentiesleutel te verkrijgen en slaat vervolgens de licentiesleutel op in uw clienttoepassing. Het ontwikkelprogramma kan bijvoorbeeld een headerbestand (.h) maken met de BSTR-licentiesleutel en vervolgens zou u dat .h-bestand opnemen in uw clienttoepassing.
Als u het onderdeel in uw clienttoepassing wilt instantiëren, probeert u eerst het object rechtstreeks te instantiëren met IClassFactory::CreateInstance. Als CreateInstance slaagt, wordt de tweede computer in licentie gegeven voor het onderdeel en kunnen objecten op elk moment worden gemaakt. Als CreateInstance-mislukt met de retourcode CLASS_E_NOTLICENSED, is de enige manier om het object te maken de runtimesleutel door te geven aan de methode CreateInstanceLic. CreateInstanceLic- controleert de sleutel en maakt het object als de sleutel geldig is.
Op deze manier kan een toepassing die is gebouwd met onderdelen (zoals besturingselementen) worden uitgevoerd op een computer die geen andere licentie heeft. Alleen de clienttoepassing met de runtimelicentie mag de betreffende onderdeelobjecten maken.
De IClassFactory2-interface ondersteunt flexibiliteit in licentieschema's. De server-implementor kan bijvoorbeeld licentiesleutels in het onderdeel versleutelen voor extra beveiliging. Server-implementatoren kunnen ook niveaus van functionaliteit in hun objecten in- of uitschakelen door verschillende licentiesleutels voor verschillende functies te verstrekken. Eén sleutel kan bijvoorbeeld een basisniveau van functionaliteit toestaan, terwijl een andere basis- en geavanceerde functionaliteit toestaat, enzovoort.
Verwante onderwerpen