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


Фабрики классов и прослушивание

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

Еще одной важной особенностью элементов управления OLE является их способность применять лицензию. ControlWizard позволяет включить лицензирование во время создания проекта управления. Дополнительные сведения о лицензировании элементов управления см. в статье ActiveX Controls: Licensing An ActiveX Control.

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

Фабрики классов и прослушивание

Макрос или функция Description
DECLARE_OLECREATE_EX Объявляет фабрику классов для страницы элемента управления OLE или свойства.
IMPLEMENT_OLECREATE_EX Реализует функцию элемента управления GetClassID и объявляет экземпляр фабрики классов.
BEGIN_OLEFACTORY Начинает объявление любых функций лицензирования.
END_OLEFACTORY Заканчивает объявление любых функций лицензирования.
AfxVerifyLicFile Проверяет, лицензируется ли элемент управления для использования на определенном компьютере.

DECLARE_OLECREATE_EX

Объявляет фабрику классов и GetClassID функцию-член класса элемента.

DECLARE_OLECREATE_EX(class_name)

Параметры

class_name
Имя класса элемента управления.

Замечания

Используйте этот макрос в файле заголовка класса элемента управления для элемента управления, который не поддерживает лицензирование.

Обратите внимание, что этот макрос служит той же цели, что и следующий пример кода:

BEGIN_OLEFACTORY(CMyAxCtrl)
END_OLEFACTORY(CMyAxCtrl)

Требования

Заголовок afxctl.h

IMPLEMENT_OLECREATE_EX

Реализует фабрику классов элемента управления и GetClassID функцию-член класса элемента.

IMPLEMENT_OLECREATE_EX(
   class_name,
    external_name,
    l,
    w1,
    w2,
    b1,
    b2,
    b3,
    b4,
    b5,
    b6,
    b7,
    b8)

Параметры

class_name
Имя класса страницы свойств элемента управления.

external_name
Имя объекта, предоставляемое приложениям.

l, w1, w2b1b2b3b4b5b6b7b8
Компоненты класса CLSID. Дополнительные сведения об этих параметрах см. в разделе "Примечания".IMPLEMENT_OLECREATE

Замечания

Этот макрос должен отображаться в файле реализации для любого класса элемента управления, использующего DECLARE_OLECREATE_EX макрос или BEGIN_OLEFACTORY END_OLEFACTORY макросы. Внешнее имя — это идентификатор элемента управления OLE, который предоставляется другим приложениям. Контейнеры используют это имя для запроса объекта этого класса элемента управления.

Требования

Заголовок afxctl.h

BEGIN_OLEFACTORY

Начинает объявление фабрики классов в файле заголовка класса элемента управления.

BEGIN_OLEFACTORY(class_name)

Параметры

class_name
Указывает имя класса элемента управления, фабрика классов которого это.

Замечания

Объявления функций лицензирования фабрики классов должны начинаться сразу после BEGIN_OLEFACTORY.

Требования

Заголовок afxctl.h

END_OLEFACTORY

Заканчивает объявление фабрики классов элемента управления.

END_OLEFACTORY(class_name)

Параметры

class_name
Имя класса управления, фабрика классов которого это.

Требования

Заголовок afxctl.h

AfxVerifyLicFile

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

BOOL AFXAPI AfxVerifyLicFile(
    HINSTANCE  hInstance,
    LPCTSTR  pszLicFileName,
    LPOLESTR  pszLicFileContents,
    UINT cch = -1);

Параметры

hInstance
Дескриптор экземпляра библиотеки DLL, связанной с лицензированным элементом управления.

pszLicFileName
Указывает на строку символов, завершающую значение NULL, содержащую имя файла лицензии.

pszLicFileContents
Указывает на последовательность байтов, которая должна соответствовать последовательности, найденной в начале файла лицензии.

cch
Число символов в pszLicFileContents.

Возвращаемое значение

Nonzero, если файл лицензии существует и начинается с последовательности символов в pszLicFileContents; в противном случае — 0.

Замечания

Если cch значение равно -1, эта функция использует следующее:

_tcslen(pszLicFileContents);

Требования

Заголовок afxctl.h

См. также

Макросы и глобальные