Элементы управления ActiveX в MFC. Лицензирование элемента управления ActiveX
Поддержка лицензий, необязательная функция элементов activeX, позволяет контролировать, кто может использовать или распространять элемент управления. (Дополнительные сведения о проблемах с лицензированием см. в разделе "Проблемы с лицензированием" Обновление существующего элемента управления ActiveX.)
Важно!
ActiveX — это устаревшая технология, которую не следует использовать для новых разработок. Дополнительные сведения о современных технологиях, которые заменяют ActiveX, см. в разделе Элементы ActiveX.
В этой статье рассматриваются следующие темы.
Элементы ActiveX, реализующие лицензирование, позволяют вам, как разработчику элементов управления, определить, как другие пользователи будут использовать элемент ActiveX. Вы предоставляете покупателю элементов управления элемент управления и . LIC-файл с соглашением, которое покупатель может распространить элемент управления, но не . LIC-файл с приложением, использующим элемент управления. Это позволяет пользователям этого приложения создавать новые приложения, использующие элемент управления, без первого лицензирования элемента управления.
Общие сведения о лицензировании activeX Control
Чтобы обеспечить лицензирования для элементов ActiveX, класс COleObjectFactory предоставляет реализацию для нескольких функций в интерфейсеIClassFactory2
: IClassFactory2::RequestLicKey
и IClassFactory2::GetLicInfo
IClassFactory2::CreateInstanceLic
. Когда разработчик приложения-контейнера отправляет запрос на создание экземпляра элемента управления, вызов GetLicInfo
выполняется для проверки того, что элемент управления. LIC-файл присутствует. Если элемент управления лицензирован, экземпляр элемента управления можно создать и поместить в контейнер. После завершения создания приложения контейнера еще один вызов функции, на RequestLicKey
этот раз выполняется. Эта функция возвращает ключ лицензии (простую символьную строку) приложению контейнера. Затем возвращенный ключ внедряется в приложение.
На рисунке ниже показана проверка лицензии элемента activeX, который будет использоваться во время разработки приложения контейнера. Как упоминание ранее, разработчик приложения-контейнера должен иметь правильный. LIC-файл, установленный на компьютере разработки для создания экземпляра элемента управления.
Проверка лицензированного элемента activeX во время разработки
Следующий процесс, показанный на следующем рисунке, возникает, когда конечный пользователь запускает приложение контейнера.
При запуске приложения обычно необходимо создать экземпляр элемента управления. Контейнер выполняет это путем вызова, передав внедренного CreateInstanceLic
ключа лицензии в качестве параметра. Затем сравнение строк выполняется между внедренным ключом лицензии и собственной копией ключа лицензии элемента управления. Если совпадение выполнено успешно, создается экземпляр элемента управления, и приложение продолжает выполняться нормально. Обратите внимание, что . LIC-файл не должен присутствовать на компьютере пользователя элемента управления.
Проверка лицензированного элемента ActiveX во время выполнения
Лицензирование управления состоит из двух основных компонентов: конкретный код в библиотеке DLL реализации элемента управления и файле лицензии. Код состоит из двух (или, возможно, трех) вызовов функций и символьной строки, которая далее называется "строкой лицензии", содержащей уведомление об авторских правах. Эти вызовы и строка лицензии находятся в реализации элемента управления (. Файл CPP. Файл лицензии, созданный мастером элементов управления ActiveX, представляет собой текстовый файл с заявлением об авторских правах. Он называется с помощью имени проекта с именем. Расширение LIC, например SAMPLE. LIC. Лицензированный элемент управления должен сопровождаться файлом лицензии, если требуется использование времени разработки.
Создание лицензированного элемента управления
При использовании мастера управления ActiveX для создания платформы управления легко включить поддержку лицензирования. Если указать, что элемент управления должен иметь лицензию во время выполнения, мастер управления ActiveX добавляет код в класс управления для поддержки лицензирования. Код состоит из функций, использующих ключ и файл лицензии для проверки лицензии. Эти функции также можно изменить для настройки лицензирования элементов управления. Дополнительные сведения о настройке лицензий см . в разделе "Настройка лицензирования элемента activeX" далее в этой статье.
Добавление поддержки лицензирования с помощью мастера управления ActiveX при создании проекта управления
- Используйте инструкции по созданию элемента управления ActiveX MFC. Страница приложения Параметры мастера элементов управления ActiveX содержит параметр создания элемента управления с лицензией во время выполнения.
Мастер управления ActiveX теперь создает платформу управления ActiveX, которая включает базовую поддержку лицензирования. Подробное описание кода лицензирования см. в следующем разделе.
Поддержка лицензирования
При использовании мастера управления ActiveX для добавления поддержки лицензирования в элемент ActiveX мастер управления ActiveX добавляет код, объявляющий и реализующий возможность лицензирования, добавляется в файлы заголовков и реализаций элементов управления. Этот код состоит из VerifyUserLicense
функции-члена и GetLicenseKey
функции-члена, которая переопределяет реализации по умолчанию, найденные в COleObjectFactory . Эти функции извлекают и проверяют лицензию элемента управления.
Примечание.
Третья функция-член не VerifyLicenseKey
создается мастером управления ActiveX, но может быть переопределена для настройки поведения проверки ключа лицензии.
Эти функции-члены:
-
Проверяет, позволяет ли элемент управления использовать время разработки, проверка систему для наличия файла лицензии элемента управления. Эта функция вызывается платформой как часть обработки
IClassFactory2::GetLicInfo
иIClassFactory::CreateInstanceLic
. -
Запрашивает уникальный ключ из библиотеки DLL элемента управления. Этот ключ внедряется в приложение контейнера и используется позже вместе с
VerifyLicenseKey
ним для создания экземпляра элемента управления. Эта функция вызывается платформой в процессе обработкиIClassFactory2::RequestLicKey
. -
Проверяет, что внедренный ключ и уникальный ключ элемента управления совпадают. Это позволяет контейнеру создать экземпляр элемента управления для его использования. Эта функция вызывается платформой в процессе обработки
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
функции GetLicenseKey
VerifyLicenseKey
виртуальной фабрики управления объявляются как виртуальные функции-члены, можно настроить поведение лицензирования элемента управления.
Например, можно предоставить несколько уровней лицензирования для элемента управления, переопределив VerifyUserLicense
функции или VerifyLicenseKey
члены. Внутри этой функции можно настроить свойства или методы, предоставляемые пользователю в соответствии с обнаруженным уровнем лицензии.
Вы также можете добавить код в VerifyLicenseKey
функцию, которая предоставляет настраиваемый метод для информирования пользователя о сбое создания элемента управления. Например, в функции-члене VerifyLicenseKey
можно отобразить окно сообщения о том, что элемент управления не удалось инициализировать и почему.
Примечание.
Другим способом настройки проверки лицензии activeX является проверка базу данных регистрации для определенного раздела реестра вместо вызоваAfxVerifyLicFile
. Пример реализации по умолчанию см. в разделе "Изменения файла реализации" этой статьи.
Дополнительные сведения о проблемах с лицензированием см. в разделе "Проблемы с лицензированием" в обновлении существующего элемента управления ActiveX.
См. также
Элементы ActiveX библиотеки MFC
Мастер элементов ActiveX MFC