Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 temacie 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 zagadnienia:
Kontrolki ActiveX, które implementują licencjonowanie, umożliwiają deweloperowi kontroli określenie, w jaki sposób inne osoby będą używać kontrolki ActiveX. Nabywca otrzymuje kontrolkę i plik .LIC zgodnie z umową, że może rozpowszechniać kontrolkę, ale nie plik .LIC, wraz z aplikacją, która korzysta z kontrolki. Uniemożliwia to użytkownikom tej aplikacji pisanie nowych aplikacji korzystających z kontrolki bez uprzedniego uzyskania licencji na kontrolkę.
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 w celu sprawdzenia, czy plik .LIC kontrolki jest obecny. Jeśli kontrolka jest licencjonowana, można utworzyć i umieścić w kontenerze instancję kontrolki. Po tym jak deweloper zakończył konstruowanie aplikacji kontenera, wykonano kolejne wywołanie funkcji, tym razem do RequestLicKey. 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 kontenerowej musi mieć odpowiedni plik .LIC zainstalowany na maszynie deweloperskiej 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 metody CreateInstanceLic, 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 plik .LIC nie musi być obecny na komputerze użytkownika.
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 nazwane przy użyciu nazwy projektu z rozszerzeniem .LIC, na przykład SAMPLE.LIC. Licencjonowana kontrolka musi być dołączona do pliku licencji, jeśli wymagane jest użycie w czasie projektowania.
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 Ustawienia aplikacji 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 funkcję licencjonowania. Kod ten jest umieszczany w nagłówku kontrolki oraz w plikach 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 / Notatka
Trzecia funkcja składowa VerifyLicenseKey nie jest generowana przez Kreatora kontrolek ActiveX, ale jest możliwa do zastąpienia w celu dostosowania działania weryfikacji klucza licencji.
Te funkcje członkowskie to:
-
Sprawdza, czy kontrolka może być używana podczas projektowania, sprawdzając system pod kątem obecności pliku licencji kontroli. Ta funkcja jest wywoływana przez framework w ramach przetwarzania
IClassFactory2::GetLicInfoiIClassFactory::CreateInstanceLic. -
Żąda unikatowego klucza z biblioteki DLL sterownika. Ten klucz jest osadzony w aplikacji kontenerowej i później używany razem z elementem
VerifyLicenseKey, aby utworzyć wystąpienie kontrolki. Ta funkcja jest wywoływana przez framework 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 na potrzeby jego działania. Ta funkcja jest wywoływana przez platformę w ramach przetwarzania
IClassFactory2::CreateInstanceLici 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 składowe obiektu CSampleCtrlfactory, jedna, która weryfikuje obecność pliku .LIC kontrolki, a druga, która pobiera klucz licencji do użycia w aplikacji zawierającej tę 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 / Notatka
Jeśli modyfikujesz szLicString w jakikolwiek sposób, musisz również zmodyfikować pierwszą linię w pliku kontrolnym .LIC, inaczej licencjonowanie 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 plik IDL projektu sterującego. Licencjonowane słowo kluczowe jest dodawane do deklaracji coclass kontrolki, jak pokazano 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 fabrycznej sterowania, można dostosować zachowanie licencjonowania kontrolki.
Na przykład można udostępnić kilka poziomów licencjonowania dla kontroli, przesłaniając funkcje członkowskie VerifyUserLicense 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 funkcji składowej VerifyLicenseKey można wyświetlić pole komunikatu z informacją, że kontrolka nie może się zainicjować oraz dlaczego.
Uwaga / Notatka
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.