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::GetLicInfo
i 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 RequestLicKey
metody . 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.
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 CreateInstanceLic
metody , 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.
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
- 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:
-
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
iIClassFactory::CreateInstanceLic
. -
Żą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 przetwarzaniaIClassFactory2::RequestLicKey
. -
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 CSampleCtrl
skł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
, GetLicenseKey
i 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.