Kontrolki ActiveX MFC: licencjonowanie kontrolki ActiveX

Obsługa licencjonowania, opcjonalna funkcja kontrolek ActiveX, umożliwia kontrolowanie, kto może używać lub rozpowszechniać kontrolkę. (Aby uzyskać dodatkową dyskusję na temat problemów z licencjonowaniem, zobacz Problemy z licencjonowaniem w programie Uaktualnianie istniejącej kontrolki ActiveX).

Ważne

ActiveX to starsza technologia, która nie powinna być używana do tworzenia nowych rozwiązań. Aby uzyskać więcej informacji na temat nowoczesnych technologii zastępujących activex, zobacz Kontrolki ActiveX.

W tym artykule omówiono następujące tematy:

Kontrolki ActiveX, które implementują licencjonowanie, umożliwiają deweloperowi kontroli określenie, w jaki sposób inne osoby będą używać kontrolki ActiveX. Należy podać nabywcę kontroli za pomocą kontrolek i . Plik LIC z umową, że nabywca może rozpowszechnić kontrolę, ale nie . Plik LIC z aplikacją, która używa kontrolki. Uniemożliwia to użytkownikom tej aplikacji pisanie nowych aplikacji korzystających z kontrolki bez uprzedniego licencjonowania kontroli.

Omówienie licencjonowania kontrolek ActiveX

Aby zapewnić obsługę licencjonowania kontrolek ActiveX, klasa COleObjectFactory udostępnia implementację dla kilku funkcji w interfejsie IClassFactory2 : IClassFactory2::RequestLicKey, IClassFactory2::GetLicInfoi IClassFactory2::CreateInstanceLic. Gdy deweloper aplikacji kontenera wysyła żądanie utworzenia wystąpienia kontrolki, wykonywane jest wywołanie GetLicInfo polecenia w celu sprawdzenia, czy kontrolka . Plik LIC jest obecny. Jeśli kontrolka jest licencjonowana, można utworzyć i umieścić w kontenerze wystąpienie kontrolki. Po zakończeniu konstruowania aplikacji kontenera przez dewelopera wykonano kolejne wywołanie funkcji , tym razem do RequestLicKeymetody . Ta funkcja zwraca klucz licencji (prosty ciąg znaków) do aplikacji kontenera. Zwrócony klucz jest następnie osadzony w aplikacji.

Na poniższej ilustracji przedstawiono weryfikację licencji kontrolki ActiveX, która będzie używana podczas tworzenia aplikacji kontenera. Jak wspomniano wcześniej, deweloper aplikacji kontenera musi mieć odpowiedni element . Plik LIC zainstalowany na maszynie dewelopera w celu utworzenia wystąpienia kontrolki.

Licensed ActiveX control verified at development.
Weryfikacja licencjonowanej kontrolki ActiveX podczas opracowywania

Następny proces, pokazany na poniższym rysunku, występuje, gdy użytkownik końcowy uruchamia aplikację kontenera.

Po uruchomieniu aplikacji należy zwykle utworzyć wystąpienie kontrolki. Kontener wykonuje to przez wywołanie CreateInstanceLicmetody , przekazując osadzony klucz licencji jako parametr. Następnie następuje porównanie ciągów między osadzonym kluczem licencji a własną kopią klucza licencji kontrolki. Jeśli dopasowanie zakończy się pomyślnie, zostanie utworzone wystąpienie kontrolki, a aplikacja będzie nadal wykonywana normalnie. Zwróć uwagę, że element . Plik LIC nie musi znajdować się na komputerze użytkownika sterującego.

Licensed ActiveX control verified at execution.
Weryfikacja licencjonowanej kontrolki ActiveX podczas wykonywania

Licencjonowanie kontroli składa się z dwóch podstawowych składników: określonego kodu w pliku DLL implementacji kontroli i pliku licencji. Kod składa się z dwóch (lub prawdopodobnie trzech) wywołań funkcji i ciągu znaku, określanego dalej jako "ciąg licencji", zawierający powiadomienie o prawach autorskich. Te wywołania i ciąg licencji znajdują się w implementacji kontrolki (. Plik CPP). Plik licencji wygenerowany przez Kreatora kontrolek ActiveX jest plikiem tekstowym z oświadczeniem o prawach autorskich. Jest on nazwany przy użyciu nazwy projektu z . Rozszerzenie LIC, na przykład SAMPLE. LIC. Jeśli wymagane jest użycie czasu projektowania, należy dołączyć licencjonowany plik licencji.

Tworzenie licencjonowanej kontrolki

Jeśli używasz Kreatora kontrolek ActiveX do utworzenia struktury sterowania, łatwo jest uwzględnić obsługę licencjonowania. Po określeniu, że kontrolka powinna mieć licencję czasu wykonywania, Kreator kontrolek ActiveX dodaje kod do klasy kontrolnej w celu obsługi licencjonowania. Kod składa się z funkcji, które używają klucza i pliku licencji do weryfikacji licencji. Te funkcje można również zmodyfikować w celu dostosowania licencjonowania kontrolek. Aby uzyskać więcej informacji na temat dostosowywania licencji, zobacz Dostosowywanie licencjonowania kontrolki ActiveX w dalszej części tego artykułu.

Aby dodać obsługę licencjonowania za pomocą Kreatora kontrolek ActiveX podczas tworzenia projektu sterowania

  1. Skorzystaj z instrukcji w temacie Tworzenie kontrolki ActiveX MFC. Strona Aplikacja Ustawienia Kreatora kontrolek ActiveX zawiera opcję utworzenia kontrolki z licencją czasu wykonywania.

Kreator kontrolek ActiveX generuje teraz strukturę kontrolek ActiveX, która obejmuje podstawową obsługę licencjonowania. Aby uzyskać szczegółowe wyjaśnienie kodu licencjonowania, zobacz następny temat.

Pomoc techniczna do licencjonowania

Gdy używasz Kreatora kontrolek ActiveX do dodawania obsługi licencjonowania do kontrolki ActiveX, Kreator kontrolek ActiveX dodaje kod, który deklaruje i implementuje możliwość licencjonowania jest dodawany do nagłówka kontrolki i plików implementacji. Ten kod składa się z funkcji składowej VerifyUserLicense i funkcji składowej GetLicenseKey , która zastępuje domyślne implementacje znalezione w COleObjectFactory . Te funkcje pobierają i weryfikują licencję kontroli.

Uwaga

Trzecia funkcja VerifyLicenseKey składowa nie jest generowana przez Kreatora kontrolek ActiveX, ale może zostać zastąpiona w celu dostosowania zachowania weryfikacji klucza licencji.

Te funkcje składowe to:

  • VerifyUserLicense

    Sprawdza, czy kontrolka zezwala na użycie w czasie projektowania, sprawdzając system pod kątem obecności pliku licencji kontroli. Ta funkcja jest wywoływana przez strukturę w ramach przetwarzania IClassFactory2::GetLicInfo i IClassFactory::CreateInstanceLic.

  • GetLicenseKey

    Żąda unikatowego klucza z biblioteki DLL kontrolki. Ten klucz jest osadzony w aplikacji kontenera i używany później w połączeniu z elementem VerifyLicenseKey, aby utworzyć wystąpienie kontrolki. Ta funkcja jest wywoływana przez strukturę w ramach przetwarzania IClassFactory2::RequestLicKey.

  • Verifylicensekey

    Sprawdza, czy klucz osadzony i unikatowy klucz kontrolki są takie same. Dzięki temu kontener może utworzyć wystąpienie kontrolki do użycia. Ta funkcja jest wywoływana przez platformę w ramach przetwarzania IClassFactory2::CreateInstanceLic i może zostać zastąpiona w celu zapewnienia dostosowanej weryfikacji klucza licencji. Domyślna implementacja wykonuje porównanie ciągów. Aby uzyskać więcej informacji, zobacz Dostosowywanie licencjonowania kontrolki ActiveX w dalszej części tego artykułu.

Modyfikacje pliku nagłówka

Kreator kontrolek ActiveX umieszcza następujący kod w pliku nagłówka kontrolki. W tym przykładzie zadeklarowane są dwie funkcje CSampleCtrlskładowe obiektu factory , które weryfikują obecność kontrolki . Plik LIC i inny, który pobiera klucz licencji do użycia w aplikacji zawierającej kontrolkę:

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

Modyfikacje pliku implementacji

Kreator kontrolek ActiveX umieszcza następujące dwie instrukcje w pliku implementacji kontrolki w celu zadeklarowania nazwy pliku licencji i ciągu licencji:

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

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

Uwaga

Jeśli modyfikujesz szLicString w jakikolwiek sposób, musisz również zmodyfikować pierwszy wiersz w kontrolce . Plik lub licencjonowanie LIC nie będzie działać prawidłowo.

Kreator kontrolek ActiveX umieszcza następujący kod w pliku implementacji kontrolki w celu zdefiniowania klas VerifyUserLicense kontrolnych i GetLicenseKey funkcji:

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

Na koniec Kreator kontrolek ActiveX modyfikuje projekt sterujący . Plik IDL. Słowo kluczowe licencjonowane jest dodawane do deklaracji coclass kontrolki, jak w poniższym przykładzie:

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

Dostosowywanie licencjonowania kontrolki ActiveX

Ponieważ VerifyUserLicense, GetLicenseKeyi VerifyLicenseKey są deklarowane jako wirtualne funkcje składowe klasy fabryki sterowania, można dostosować zachowanie licencjonowania kontrolki.

Na przykład można udostępnić kilka poziomów licencjonowania dla kontrolki, przesłaniając VerifyUserLicense funkcje członkowskie lub VerifyLicenseKey . Wewnątrz tej funkcji można dostosować właściwości lub metody widoczne dla użytkownika zgodnie z wykrytym poziomem licencji.

Możesz również dodać kod do VerifyLicenseKey funkcji, która udostępnia niestandardową metodę informowania użytkownika, że tworzenie kontrolki nie powiodło się. Na przykład w VerifyLicenseKey funkcji składowej można wyświetlić pole komunikatu z informacją, że kontrolka nie może zainicjować i dlaczego.

Uwaga

Innym sposobem dostosowania weryfikacji licencji kontroli ActiveX jest sprawdzenie bazy danych rejestracji dla określonego klucza rejestru, a nie wywołanie metody AfxVerifyLicFile. Aby zapoznać się z przykładem implementacji domyślnej, zobacz sekcję Modyfikacje pliku implementacji w tym artykule.

Aby zapoznać się z dodatkowym omówieniem problemów z licencjonowaniem, zobacz Problemy z licencjonowaniem w temacie Uaktualnianie istniejącej kontrolki ActiveX.

Zobacz też

Kontrolki ActiveX MFC
Kreator kontrolek ActiveX MFC