Поделиться через


Контролы ActiveX MFC: лицензирование контролов ActiveX

Поддержка лицензий, являющаяся необязательной функцией элементов ActiveX, позволяет контролировать, кто может использовать или распространять этот элемент управления. (Дополнительные сведения о проблемах с лицензированием см. в разделе "Проблемы с лицензированием" в обновлении существующего элемента управления ActiveX.)

Это важно

ActiveX — это устаревшая технология, которая не должна использоваться для новой разработки. Дополнительные сведения о современных технологиях, заменяющих ActiveX, см. в разделе ActiveX Controls.

В этом статье рассматриваются следующие темы:

Элементы ActiveX, реализующие лицензирование, позволяют вам, как разработчику элементов управления, определить, как другие пользователи будут использовать элемент ActiveX. Вы предоставляете покупателю элемент управления и .LIC-файл при условии, что покупатель может распространять элемент управления, но не распространять .LIC-файл, вместе с приложением, которое использует элемент управления. Это предотвращает пользователей этого приложения от создания новых приложений, использующих элемент управления, без лицензирования элемента управления у вас.

Общие сведения о лицензировании activeX Control

Чтобы обеспечить поддержку лицензирования для элементов ActiveX, класс COleObjectFactory предоставляет реализацию для нескольких функций в интерфейсе IClassFactory2: IClassFactory2::RequestLicKey, IClassFactory2::GetLicInfo, и IClassFactory2::CreateInstanceLic. Когда разработчик приложения-контейнера отправляет запрос на создание экземпляра элемента управления, вызов GetLicInfo выполняется для проверки того, что элемент управления. LIC-файл присутствует. Если элемент управления лицензирован, экземпляр элемента управления можно создать и поместить в контейнер. После того, как разработчик завершит создание приложения-контейнера, производится еще один вызов функции, на этот раз к RequestLicKey. Эта функция возвращает ключ лицензии (простую символьную строку) приложению контейнера. Затем возвращенный ключ внедряется в приложение.

На рисунке ниже показана проверка лицензии элемента ActiveX, который будет использоваться во время разработки контейнерного приложения. Как упоминалось ранее, разработчик приложения-контейнера должен иметь правильный. LIC-файл, установленный на компьютере разработки для создания экземпляра элемента управления.

Лицензированный элемент activeX, проверенный при разработке.
Проверка лицензированного элемента ActiveX Control во время разработки

Следующий процесс, показанный на следующем рисунке, возникает, когда конечный пользователь запускает приложение контейнера.

При запуске приложения обычно необходимо создать экземпляр элемента управления. Контейнер выполняет это, вызывая CreateInstanceLic, передавая встроенный лицензионный ключ в качестве параметра. Затем сравнение строк выполняется между внедренным ключом лицензии и собственной копией ключа лицензии элемента управления. Если сопоставление прошло успешно, создается экземпляр элемента управления, и приложение продолжает нормально выполняться. Обратите внимание, что . LIC-файл не должен присутствовать на компьютере пользователя элемента управления.

Лицензированный элемент activeX, проверенный при выполнении.
Проверка лицензированного элемента управления ActiveX во время выполнения

Лицензирование управления состоит из двух основных компонентов: конкретный код в библиотеке DLL реализации элемента управления и файле лицензии. Код состоит из двух (или, возможно, трех) вызовов функций и символьной строки, которая далее называется "строкой лицензии", содержащей уведомление об авторских правах. Эти вызовы и строка лицензии находятся в файле реализации элемента управления (.CPP). Файл лицензии, созданный мастером элементов управления ActiveX, представляет собой текстовый файл с заявлением об авторских правах. Файл называется с использованием имени проекта с расширением .LIC, например SAMPLE.LIC. Лицензированный элемент управления должен сопровождаться файлом лицензии, если требуется использование во время разработки.

Создание лицензированного элемента управления

При использовании мастера управления ActiveX для создания платформы управления легко включить поддержку лицензирования. Если указать, что элемент управления должен иметь лицензию во время выполнения, мастер управления ActiveX добавляет код в класс управления для поддержки лицензирования. Код состоит из функций, использующих ключ и файл лицензии для проверки лицензии. Эти функции также можно изменить для настройки лицензирования элементов управления. Дополнительные сведения о настройке лицензий см. в разделе "Настройка лицензирования элемента ActiveX" позднее в этой статье.

Добавление поддержки лицензирования с помощью мастера управления ActiveX при создании проекта управления

  1. Используйте инструкции по созданию элемента управления ActiveX MFC. Страница Настройки приложения мастера элементов управления ActiveX предоставляет возможность создания элемента управления с лицензией времени выполнения.

Мастер управления ActiveX теперь создает платформу управления ActiveX, которая включает базовую поддержку лицензирования. Подробное описание кода лицензирования см. в следующем разделе.

Поддержка лицензирования

При использовании мастера управления ActiveX для добавления поддержки лицензирования к элементу ActiveX, мастер добавляет код, объявляющий и реализующий возможность лицензирования, в заголовочные и файлы реализации элемента управления. Этот код состоит из VerifyUserLicense функции-члена и GetLicenseKey функции-члена, которая переопределяет реализации по умолчанию, найденные в COleObjectFactory . Эти функции извлекают и проверяют лицензию элемента управления.

Замечание

Третья функция-член, VerifyLicenseKey, не создается мастером управления ActiveX, но может быть переопределена для настройки поведения проверки ключа лицензии.

Эти функции-члены:

  • VerifyUserLicense

    Проверяет, позволяет ли элемент управления использование на этапе проектирования, проверяя систему на наличие файла лицензии для элемента управления. Эта функция вызывается платформой как часть обработки IClassFactory2::GetLicInfo и IClassFactory::CreateInstanceLic.

  • GetLicenseKey

    Запрашивает уникальный ключ из библиотеки DLL элемента управления. Этот ключ внедряется в контейнерное приложение и используется позже, вместе с VerifyLicenseKey, для создания экземпляра элемента управления. Эта функция вызывается платформой в процессе обработки IClassFactory2::RequestLicKey.

  • VerifyLicenseKey

    Проверяет, что внедренный ключ и уникальный ключ элемента управления совпадают. Это позволяет контейнеру создать экземпляр элемента управления для его использования. Эта функция вызывается платформой в процессе обработки IClassFactory2::CreateInstanceLic и может быть переопределена для предоставления настраиваемой проверки ключа лицензии. Реализация по умолчанию выполняет сравнение строк. Дополнительные сведения см. в разделе "Настройка лицензирования контрола ActiveX" в дальнейшей части этой статьи.

Изменения файла заголовка

Мастер управления ActiveX помещает следующий код в файл заголовка элемента управления. В этом примере объявляются две функции-члены объекта CSampleCtrlfactory, которые проверяют наличие .LIC файла управления и извлекают лицензионный ключ, используемый в приложении, содержащем элемент управления.

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

Изменения файла реализации

Мастер управления ActiveX помещает следующие две инструкции в файл реализации элемента управления, чтобы объявить имя файла лицензии и строку лицензии:

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

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

Замечание

При любом изменении szLicString необходимо также изменить первую строку в управляющем .LIC файле, иначе лицензирование не будет работать должным образом.

Мастер управления ActiveX помещает следующий код в файл реализации элемента управления, чтобы определить класс VerifyUserLicense и GetLicenseKey функции элемента управления:

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

Наконец, мастер элемента управления ActiveX изменяет файл .IDL проекта элемента управления. Лицензированное ключевое слово добавляется в объявление сокласса элемента управления, как показано в следующем примере:

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

Настройка лицензирования элемента управления ActiveX

Поскольку VerifyUserLicense, GetLicenseKey, и VerifyLicenseKey объявлены как виртуальные функции-члены класса фабрики управления, вы можете настроить поведение лицензирования элемента управления.

Например, можно предоставить несколько уровней лицензирования для элемента управления, переопределив функции-члены VerifyUserLicense или VerifyLicenseKey. Внутри этой функции можно настроить свойства или методы, предоставляемые пользователю в соответствии с обнаруженным уровнем лицензии.

Вы также можете добавить код в VerifyLicenseKey функцию, которая предоставляет настраиваемый метод для информирования пользователя о сбое создания элемента управления. Например, в функции-члене VerifyLicenseKey можно отобразить сообщение, объясняющее, почему элемент управления не удалось инициализировать.

Замечание

Другим способом настройки проверки лицензии ActiveX является проверка реестра на наличие определенного ключа реестра вместо вызова AfxVerifyLicFile. Пример реализации по умолчанию см. в разделе "Изменения файла реализации " этой статьи.

Дополнительные сведения о проблемах с лицензированием см. в разделе "Проблемы с лицензированием" в обновлении существующего элемента управления ActiveX.

См. также

Элементы управления ActiveX MFC
Мастер управления ActiveX MFC