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


Регистрация элементов управления OLE

К элементам управления OLE, как и к другим объектам СЕРВЕРА OLE, можно получить доступ к другим приложениям с поддержкой OLE. Это достигается путем регистрации библиотеки и класса элемента управления.

Следующие функции позволяют добавлять и удалять класс элемента управления, страницы свойств и библиотеку типов в базе данных регистрации Windows:

Регистрация элементов управления OLE

Имя Описание
AfxOleRegisterControlClass Добавляет класс элемента управления в базу данных регистрации.
AfxOleRegisterPropertyPageClass Добавляет страницу свойств элемента управления в базу данных регистрации.
AfxOleRegisterTypeLib Добавляет библиотеку типов элемента управления в базу данных регистрации.
AfxOleUnregisterClass Удаляет класс элемента управления или класс страницы свойств из базы данных регистрации.
AfxOleUnregisterTypeLib Удаляет библиотеку типов элемента управления из базы данных регистрации.

AfxOleRegisterTypeLib обычно вызывается в реализации DllRegisterServerбиблиотеки DLL элемента управления. Аналогичным образом AfxOleUnregisterTypeLib вызывается DllUnregisterServer. AfxOleRegisterControlClass, AfxOleRegisterPropertyPageClassи AfxOleUnregisterClass обычно вызывается UpdateRegistry функцией-членом фабрики или страницы свойств элемента управления.

AfxOleRegisterControlClass

Регистрирует класс управления в базе данных регистрации Windows.

BOOL AFXAPI AfxOleRegisterControlClass(
    HINSTANCE hInstance,
    REFCLSID clsid,
    LPCTSTR pszProgID,
    UINT idTypeName,
    UINT idBitmap,
    int nRegFlags,
    DWORD dwMiscStatus,
    REFGUID tlid,
    WORD wVerMajor,
    WORD wVerMinor);

Параметры

hInstance
Дескриптор экземпляра модуля, связанного с классом элемента управления.

clsid
Уникальный идентификатор класса элемента управления.

pszProgID
Уникальный идентификатор программы элемента управления.

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

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

nRegFlags
Содержит один или несколько следующих флагов:

  • afxRegInsertable Позволяет элементу управления отображаться в диалоговом окне "Вставка объекта" для объектов OLE.

  • afxRegApartmentThreading Задает модель потоков в реестре в ThreadingModel=Apartment.

  • afxRegFreeThreading Задает модель потоков в реестре в ThreadingModel=Free.

    Вы можете объединить два флага afxRegApartmentThreading и afxRegFreeThreading задать ThreadingModel=Оба. Дополнительные сведения о регистрации моделей потоков см . в разделе InprocServer32 в пакете SDK для Windows.

Примечание.

В версиях MFC до MFC 4.2 int параметр nRegFlags был параметром BOOL, bInsertable, который позволил или запретил вставку элемента управления из диалогового окна "Вставка объекта".

dwMiscStatus
Содержит один или несколько следующих флагов состояния (описание флагов см. в перечислении OLEMISC в пакете SDK для Windows):

  • OLEMISC_RECOMPOSEONRESIZE

  • OLEMISC_ONLYICONIC

  • OLEMISC_INSERTNOTREPLACE

  • OLEMISC_STATIC

  • OLEMISC_CANTLINKINSIDE

  • OLEMISC_CANLINKBYOLE1

  • OLEMISC_ISLINKOBJECT

  • OLEMISC_INSIDEOUT

  • OLEMISC_ACTIVATEWHENVISIBLE

  • OLEMISC_RENDERINGISDEVICEINDEPENDENT

  • OLEMISC_INVISIBLEATRUNTIME

  • OLEMISC_ALWAYSRUN

  • OLEMISC_ACTSLIKEBUTTON

  • OLEMISC_ACTSLIKELABEL

  • OLEMISC_NOUIACTIVATE

  • OLEMISC_ALIGNABLE

  • OLEMISC_IMEMODE

  • OLEMISC_SIMPLEFRAME

  • OLEMISC_SETCLIENTSITEFIRST

tlid
Уникальный идентификатор класса элемента управления.

wVerMajor
Основной номер версии класса элемента управления.

wVerMinor
Дополнительный номер версии класса элемента управления.

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

Ненулевое значение, если класс элемента управления зарегистрирован; в противном случае — 0.

Замечания

Это позволяет использовать элемент управления контейнерами, поддерживающими OLE-control. AfxOleRegisterControlClass обновляет реестр с именем и расположением элемента управления в системе, а также задает модель потоков, которую элемент управления поддерживает в реестре. Дополнительные сведения см . в техническом примечание 64, "Потоки модели квартиры в элементах управления OLE", а также сведения о процессах и потоках в пакете SDK для Windows.

Пример

// Member function implementation of class COleObjectFactory::UpdateRegistry
//
BOOL CMyAxCtrl::CMyAxCtrlFactory::UpdateRegistry(BOOL bRegister)
{
   // TODO: Verify that your control follows apartment-model threading rules.
   // Refer to MFC TechNote 64 for more information.
   // If your control does not conform to the apartment-model rules, then
   // you must modify the code below, changing the 6th parameter from
   // afxRegInsertable | afxRegApartmentThreading to afxRegInsertable.

   if (bRegister)
      return AfxOleRegisterControlClass(
          AfxGetInstanceHandle(),
          m_clsid,
          m_lpszProgID,
          IDS_NVC_MFCAXCTL,
          IDB_NVC_MFCAXCTL,
          afxRegInsertable | afxRegApartmentThreading,
          _dwMyOleMisc,
          _tlid,
          _wVerMajor,
          _wVerMinor);
   else
      return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}

В приведенном выше примере показано, как AfxOleRegisterControlClass вызывается с флагом для вставки и флага для ORed модели квартиры, чтобы создать шестой параметр:

afxRegInsertable | afxRegApartmentThreading,

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

Требования

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

AfxOleRegisterPropertyPageClass

Регистрирует класс страницы свойств в базе данных регистрации Windows.

BOOL AFXAPI AfxOleRegisterPropertyPageClass(
   HINSTANCE hInstance,
   REFCLSID  clsid,
   UINT idTypeName,
   int nRegFlags);

Параметры

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

clsid
Уникальный идентификатор класса страницы свойств.

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

nRegFlags
Может содержать флаг:

  • afxRegApartmentThreading Задает модель потоков в реестре для ThreadingModel = Apartment.

Примечание.

В версиях MFC до MFC 4.2 int параметр nRegFlags недоступен. Обратите внимание также, что afxRegInsertable флаг не является допустимым параметром для страниц свойств и приведет к утверждению в MFC, если он задан.

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

Ненулевое значение, если класс элемента управления зарегистрирован; в противном случае — 0.

Замечания

Это позволяет использовать страницу свойств контейнерами, поддерживающими OLE-control. AfxOleRegisterPropertyPageClass обновляет реестр с именем страницы свойств и его расположением в системе, а также задает модель потоков, которую элемент управления поддерживает в реестре. Дополнительные сведения см . в техническом примечание 64, "Потоки модели квартиры в элементах управления OLE", а также сведения о процессах и потоках в пакете SDK для Windows.

Требования

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

AfxOleRegisterTypeLib

Регистрирует библиотеку типов в базе данных регистрации Windows и позволяет использовать библиотеку типов другими контейнерами, поддерживающими OLE-control.

BOOL AfxOleRegisterTypeLib(
    HINSTANCE hInstance,
    REFGUID tlid,
    LPCTSTR pszFileName = NULL,
    LPCTSTR pszHelpDir  = NULL);

Параметры

hInstance
Дескриптор экземпляра приложения, связанного с библиотекой типов.

tlid
Уникальный идентификатор библиотеки типов.

pszFileName
Указывает на необязательное имя файла локализованной библиотеки типов (). TLB) файл для элемента управления.

pszHelpDir
Имя каталога, в котором можно найти файл справки для библиотеки типов. Если значение NULL, предполагается, что файл справки находится в том же каталоге, что и сама библиотека типов.

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

Ненулевое значение, если библиотека типов зарегистрирована; в противном случае — 0.

Замечания

Эта функция обновляет реестр с именем библиотеки типов и его расположением в системе.

Пример

// Type library guid definition.
const GUID CDECL BASED_CODE _tlid =
{ 0x77E58ED8, 0xA2C0, 0x4C13, { 0xB6, 0xC1, 0xBA, 0xD1, 0x19, 0xAF, 0xE3, 0xF1 } };

 

// Registers type library and the interfaces
// in it, afxctl.h needs to be included
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);


// CMFCAutomation.tlb should be in the same directory as exe module.
// last param can be null if help file associated w/ tlb is in same dir as .tlb
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid,
   _T("CMFCAutomation.tlb"), NULL))
{
   return ResultFromScode(SELFREG_E_TYPELIB);
}

Требования

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

AfxOleUnregisterClass

Удаляет запись класса элемента управления или страницы свойств из базы данных регистрации Windows.

BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);

Параметры

clsID
Уникальный идентификатор класса страницы элемента управления или свойства.

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

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

Ненулевое значение, если класс страницы элемента управления или свойства успешно отменялся; в противном случае — 0.

Требования

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

AfxOleUnregisterTypeLib

Вызовите эту функцию, чтобы удалить запись библиотеки типов из базы данных регистрации Windows.

BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);

Параметры

tlID
Уникальный идентификатор библиотеки типов.

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

Ненулевое значение, если библиотека типов успешно отменялась; в противном случае — 0.

Пример

// Type library GUID, corresponds to the uuid attribute of the library
// section in the .odl file.
const GUID CDECL BASED_CODE _tlid =
    {0xA44774E8, 0xAE00, 0x451F, {0x96, 0x1D, 0xC7, 0xD2, 0xD2, 0x58, 0xA0, 0x75}};

// Type library major version number, number on the left of decimal
// point, in version attribute of the library section in .odl file.
const WORD _wVerMajor = 1;

// Type library minor version number, number on the right of decimal
// point, in version attribute of the library section in .odl file.
const WORD _wVerMinor = 0;

STDAPI DllUnregisterServer(void)
{
   AFX_MANAGE_STATE(_afxModuleAddrThis);

   if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
      return ResultFromScode(SELFREG_E_TYPELIB);

   if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
      return ResultFromScode(SELFREG_E_CLASS);

   return NOERROR;
}

Требования

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

См. также

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