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


Элементы управления ActiveX в MFC. Лицензирование элемента управления ActiveX

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

Важно!

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

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

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

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

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

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

Licensed ActiveX control verified at development.
Проверка лицензированного элемента activeX во время разработки

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

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

Licensed ActiveX control verified at execution.
Проверка лицензированного элемента ActiveX во время выполнения

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

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

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

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

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

Мастер управления 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 помещает следующий код в файл заголовка элемента управления. В этом примере объявляются две функции-члены CSampleCtrlобъекта factory , которая проверяет наличие элемента управления. 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функции GetLicenseKeyVerifyLicenseKey виртуальной фабрики управления объявляются как виртуальные функции-члены, можно настроить поведение лицензирования элемента управления.

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

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

Примечание.

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

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

См. также

Элементы ActiveX библиотеки MFC
Мастер элементов ActiveX MFC