Sdílet prostřednictvím


MFC – ovládací prvky ActiveX: Licencování ovládacích prvků ActiveX

Podpora licencování, volitelná funkce ovládacích prvků technologie ActiveX, umožňuje řídit, kdo může ovládací prvek používat nebo distribuovat. (Další diskuzi o problémech s licencováním najdete v tématu Problémy s licencováním v tématu Upgrade existujícího ovládacího prvku technologie ActiveX.)

Důležité

technologie ActiveX je starší technologie, která by se neměla používat pro nový vývoj. Další informace o moderních technologiích, které nahrazují technologie ActiveX, najdete v tématu technologie ActiveX Ovládací prvky.

Tento článek popisuje následující témata:

technologie ActiveX ovládací prvky, které implementují licencování, vám jako vývojář ovládacích prvků umožňují určit, jak budou ovládací prvek technologie ActiveX používat jiní uživatelé. Poskytujete kontrolu nákupčího s kontrolou a . LIC soubor s dohodou, že kupující může kontrolu distribuovat, ale ne . Soubor LIC s aplikací, která používá ovládací prvek. Tím zabráníte uživatelům této aplikace psát nové aplikace, které ovládací prvek používají, aniž by vám řízení nejdřív licencováno.

Přehled licencování řízení technologie ActiveX

Chcete-li poskytnout podporu licencování pro technologie ActiveX ovládací prvky, COleObjectFactory třída poskytuje implementaci pro několik funkcí v IClassFactory2 rozhraní: IClassFactory2::RequestLicKey, IClassFactory2::GetLicInfoa IClassFactory2::CreateInstanceLic. Když vývojář aplikace kontejneru vytvoří požadavek na vytvoření instance ovládacího prvku, provede se volání GetLicInfo k ověření, že ovládací prvek . Soubor LIC je k dispozici. Pokud je ovládací prvek licencovaný, může být instance ovládacího prvku vytvořena a umístěna v kontejneru. Jakmile vývojář dokončí vytváření aplikace kontejneru, provede se další volání funkce, tentokrát se RequestLicKeyprovede. Tato funkce vrátí licenční klíč (jednoduchý znakový řetězec) do aplikace kontejneru. Vrácený klíč se pak vloží do aplikace.

Následující obrázek ukazuje ověření licence technologie ActiveX ovládacího prvku, který se použije při vývoji aplikace typu kontejner. Jak už bylo zmíněno dříve, vývojář aplikace kontejneru musí mít správné . Soubor LIC nainstalovaný na vývojovém počítači pro vytvoření instance ovládacího prvku.

Licensed ActiveX control verified at development.
Ověření licencovaného řízení technologie ActiveX během vývoje

Další proces, který je znázorněn na následujícím obrázku, nastane, když koncový uživatel spustí aplikaci kontejneru.

Po spuštění aplikace je obvykle potřeba vytvořit instanci ovládacího prvku. Kontejner toho dosahuje voláním CreateInstanceLic, předáním vloženého licenčního klíče jako parametru. Mezi vloženým licenčním klíčem a vlastní kopií licenčního klíče ovládacího prvku se pak vytvoří porovnání řetězců. Pokud je shoda úspěšná, vytvoří se instance ovládacího prvku a aplikace se bude dál spouštět normálně. Všimněte si, že . Soubor LIC nemusí být na počítači uživatele ovládacího prvku.

Licensed ActiveX control verified at execution.
Ověření licencovaného ovládacího prvku technologie ActiveX během provádění

Licencování ovládacích prvků se skládá ze dvou základních komponent: konkrétního kódu v knihovně DLL implementace řízení a souboru licence. Kód se skládá ze dvou (nebo případně tří) volání funkce a řetězce znaků, dále označovaného jako "licenční řetězec", který obsahuje oznámení o autorských právech. Tato volání a řetězec licence se nacházejí v implementaci řízení (. CPP) soubor. Licenční soubor vygenerovaný průvodcem ovládacím technologie ActiveX je textový soubor s prohlášením o autorských právech. Jmenuje se pomocí názvu projektu s příponou . Rozšíření LIC, například SAMPLE. LIC. Licencovaný ovládací prvek musí být doprovázen licenčním souborem, pokud je potřeba použít čas návrhu.

Vytvoření licencovaného ovládacího prvku

Pokud k vytvoření architektury ovládacích prvků použijete Průvodce technologie ActiveX ovládacími prvky, je snadné zahrnout podporu licencování. Když určíte, že ovládací prvek by měl mít licenci za běhu, průvodce technologie ActiveX Ovládací prvek přidá kód do třídy řízení pro podporu licencování. Kód se skládá z funkcí, které k ověření licence používají klíč a licenční soubor. Tyto funkce je také možné upravit a přizpůsobit tak licencování ovládacích prvků. Další informace o přizpůsobení licencí najdete v části Přizpůsobení licencování technologie ActiveX ovládacího prvku dále v tomto článku.

Přidání podpory licencování pomocí Průvodce ovládacími prvky technologie ActiveX při vytváření řídicího projektu

  1. Postupujte podle pokynů v části Vytvoření technologie ActiveX ovládacího prvku MFC. Stránka Nastavení aplikace v Průvodci ovládacími prvky technologie ActiveX obsahuje možnost vytvořit ovládací prvek s licencí za běhu.

Průvodce ovládacími prvky technologie ActiveX teď vygeneruje architekturu řízení technologie ActiveX, která zahrnuje základní podporu licencování. Podrobné vysvětlení licenčního kódu najdete v dalším tématu.

Podpora licencování

Když použijete průvodce technologie ActiveX ovládacím prvkem k přidání podpory licencování do ovládacího prvku technologie ActiveX, Průvodce ovládacím prvkem technologie ActiveX přidá kód, který deklaruje a implementuje funkci licencování, se přidá do hlavičky ovládacího prvku a souborů implementace. Tento kód se skládá z VerifyUserLicense členské funkce a GetLicenseKey členské funkce, která přepíše výchozí implementace nalezené v COleObjectFactory . Tyto funkce načítají a ověřují řídicí licenci.

Poznámka

Třetí členová funkce, VerifyLicenseKey není vygenerována průvodcem ovládacím technologie ActiveX, ale lze ji přepsat tak, aby přizpůsobila chování ověření licenčního klíče.

Mezi tyto členské funkce patří:

  • VerifyUserLicense

    Ověřuje, že ovládací prvek umožňuje použití v době návrhu kontrolou přítomnosti souboru s licencí ovládacího prvku. Tato funkce je volána architekturou jako součást zpracování IClassFactory2::GetLicInfo a IClassFactory::CreateInstanceLic.

  • GetLicenseKey

    Vyžádá si jedinečný klíč z knihovny DLL ovládacího prvku. Tento klíč je vložen do aplikace kontejneru a později ve spojení s VerifyLicenseKey, k vytvoření instance ovládacího prvku. Tato funkce je volána architekturou jako součást zpracování IClassFactory2::RequestLicKey.

  • VerifyLicenseKey

    Ověřuje, že vložený klíč a jedinečný klíč ovládacího prvku jsou stejné. To umožňuje kontejneru vytvořit instanci ovládacího prvku pro jeho použití. Tato funkce je volána architekturou jako součást zpracování IClassFactory2::CreateInstanceLic a lze ji přepsat a poskytnout přizpůsobené ověření licenčního klíče. Výchozí implementace provádí porovnání řetězců. Další informace najdete v tématu Přizpůsobení licencování ovládacího prvku technologie ActiveX, dále v tomto článku.

Úpravy souboru hlaviček

Průvodce ovládacím prvkem technologie ActiveX umístí následující kód do souboru záhlaví ovládacího prvku. V tomto příkladu jsou deklarovány dvě členské funkce objektu CSampleCtrlfactory 's, jedna, která ověřuje přítomnost ovládacího prvku . Soubor LIC a další, který načte licenční klíč, který se má použít v aplikaci obsahující ovládací prvek:

BEGIN_OLEFACTORY(CMyAxUICtrl)        // Class factory and guid
   virtual BOOL VerifyUserLicense();
virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
END_OLEFACTORY(CMyAxUICtrl)

Změny souboru implementace

Průvodce řízením technologie ActiveX umístí následující dva příkazy do souboru implementace ovládacího prvku pro deklaraci názvu licence a řetězce licence:

static const TCHAR BASED_CODE _szLicFileName[] = _T("NVC_MFC_AxUI.lic");

static const WCHAR BASED_CODE _szLicString[] = L"Copyright (c) 2006 ";

Poznámka

Pokud upravujete szLicString jakýmkoli způsobem, musíte také upravit první řádek v ovládacím prvku . Soubor nebo licencování LIC nebude správně fungovat.

Průvodce ovládacím technologie ActiveX umístí do souboru implementace ovládacího prvku následující kód, který definuje třídy VerifyUserLicense a GetLicenseKey funkce ovládacího prvku:

// CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense -
// Checks for existence of a user license

BOOL CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense()
{
   return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName, _szLicString);
}

// CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey -
// Returns a runtime licensing key

BOOL CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey(DWORD /*dwReserved*/,
   BSTR FAR* pbstrKey)
{
   if (pbstrKey == NULL)
      return FALSE;

   *pbstrKey = SysAllocString(_szLicString);
   return (*pbstrKey != NULL);
}

Nakonec průvodce ovládacím technologie ActiveX upraví projekt ovládacího prvku . IDL soubor. Licencované klíčové slovo se přidá do deklarace třídy coclass ovládacího prvku, jak je znázorněno v následujícím příkladu:

[uuid(913E450B-E720-4C71-BCDF-71C96EE98FEB), licensed,
helpstring("MyAxUI Control"), control]
coclass NVC_MFC_AxUI

Přizpůsobení licencování ovládacího prvku technologie ActiveX

Protože VerifyUserLicense, GetLicenseKeya VerifyLicenseKey jsou deklarovány jako virtuální členské funkce třídy řídicí továrny, můžete přizpůsobit chování řízení licencování ovládacího prvku.

Můžete například poskytnout několik úrovní licencování ovládacího prvku přepsáním VerifyUserLicense nebo VerifyLicenseKey členských funkcí. Uvnitř této funkce můžete upravit vlastnosti nebo metody, které jsou uživateli vystaveny, podle úrovně licence, kterou jste zjistili.

Do funkce můžete také přidat kód VerifyLicenseKey , který poskytuje přizpůsobenou metodu pro informování uživatele, že vytvoření ovládacího prvku selhalo. Ve své VerifyLicenseKey členské funkci můžete například zobrazit okno se zprávou, že se ovládací prvek nepodařilo inicializovat a proč.

Poznámka

Dalším způsobem, jak přizpůsobit ověřování licence technologie ActiveX, je zkontrolovat registrační databázi pro konkrétní klíč registru místo volání AfxVerifyLicFile. Příklad výchozí implementace naleznete v části Úpravy souboru implementace tohoto článku.

Další informace o problémech s licencováním najdete v tématu Problémy s licencováním při upgradu existujícího ovládacího prvku technologie ActiveX.

Viz také

MFC – ovládací prvky ActiveX
Průvodce ovládacím prvkem ActiveX v prostředí MFC