Compartilhar via


Registrando controles OLE

Os controles OLE, como outros objetos de servidor OLE, podem ser acessados por outros aplicativos com reconhecimento de OLE. Isso é obtido registrando a biblioteca de tipos e a classe do controle.

As seguintes funções permitem adicionar e remover a classe do controle, as páginas de propriedades e a biblioteca de tipos no banco de dados de registro do Windows:

Registrando controles OLE

Nome Descrição
AfxOleRegisterControlClass Adiciona a classe do controle ao banco de dados de registro.
Classe AfxOleRegisterPropertyPageClass Adiciona uma página de propriedades de controle ao banco de dados de registro.
AfxOleRegisterTypeLib Adiciona a biblioteca de tipos do controle ao banco de dados de registro.
AfxOleUnregisterClass Remove uma classe de controle ou uma classe de página de propriedades do banco de dados de registro.
AfxOleUnregisterTypeLib Remove a biblioteca de tipos do controle do banco de dados de registro.

AfxOleRegisterTypeLib normalmente é chamado na implementação de uma DLL de controle de DllRegisterServer. Da mesma forma, AfxOleUnregisterTypeLib é chamado por DllUnregisterServer. AfxOleRegisterControlClass, AfxOleRegisterPropertyPageClass e AfxOleUnregisterClass normalmente são chamados pela função de membro UpdateRegistry de um alocador de classe ou página de propriedades de um controle.

AfxOleRegisterControlClass

Registra a classe de controle com o banco de dados de registro do Windows.

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

Parâmetros

hInstance
O identificador de instância do módulo associado à classe de controle.

clsid
O ID de classe exclusiva do controle.

pszProgID
A ID de programa exclusiva do controle.

idTypeName
A ID do recurso da cadeia de caracteres que contém um nome de tipo legível pelo usuário para o controle.

idBitmap
A ID do recurso do bitmap usado para representar o controle OLE em uma barra de ferramentas ou paleta.

nRegFlags
Contém um ou mais dos seguintes sinalizadores:

  • afxRegInsertable Permite que o controle apareça na caixa de diálogo Inserir Objeto para objetos OLE.

  • afxRegApartmentThreading Define o modelo de threading no Registro como ThreadingModel=Apartment.

  • afxRegFreeThreading Define o modelo de threading no Registro como ThreadingModel=Free.

    Você pode combinar os dois sinalizadores afxRegApartmentThreading e afxRegFreeThreading para definir ThreadingModel=Both. Confira InprocServer32 no SDK do Windows para mais informações sobre o registro de modelo de threading.

Observação

Nas versões do MFC anteriores ao MFC 4.2, o int parâmetro nRegFlags era um parâmetro BOOL, bInsertable, que permitia ou não que o controle fosse inserido na caixa de diálogo Inserir Objeto.

dwMiscStatus
Contém um ou mais dos seguintes sinalizadores de status (para uma descrição dos sinalizadores, confira a enumeração OLEMISC no SDK do 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
A ID exclusiva da classe de controle.

wVerMajor
O número de versão principal da classe de controle.

wVerMinor
O número de versão secundária da classe de controle.

Valor de retorno

Não zero se a classe de controle foi registrada; caso contrário, 0.

Comentários

Isso permite que o controle seja usado por contêineres com reconhecimento de controle OLE. AfxOleRegisterControlClass atualiza o Registro com o nome e o local do controle no sistema e também define o modelo de threading a que o controle dá suporte no Registro. Para mais informações, confira Nota Técnica 64, "Threading apartment-model em controles OLE" e Sobre processos e threads no SDK do Windows.

Exemplo

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

O exemplo acima demonstra como AfxOleRegisterControlClass é chamado com o sinalizador para inserção e o sinalizador para o modelo de apartament ORed juntos para criar o sexto parâmetro:

afxRegInsertable | afxRegApartmentThreading,

O controle será exibido na caixa de diálogo Inserir Objeto para contêineres habilitados e terá reconhecimento de modelo de apartament. Os controles com reconhecimento de modelo de apartament devem garantir que os dados de classe estáticos sejam protegidos por bloqueios, de modo que, enquanto um controle em um apartament estiver acessando os dados estáticos, ele não seja desabilitado pelo agendador antes de ser concluído e outra instância da mesma classe comece a usar os mesmos dados estáticos. Todos os acessos aos dados estáticos ficarão entre código de seção crítico.

Requisitos

Cabeçalho afxctl.h

Classe AfxOleRegisterPropertyPageClass

Registra a classe de página de propriedades com o banco de dados de Registro do Windows.

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

Parâmetros

hInstance
O identificador de instância do módulo associado à classe da página de propriedades.

clsid
A ID de classe exclusiva da página de propriedades.

idTypeName
A ID do recurso da cadeia de caracteres que contém um nome legível pelo usuário para a página de propriedades.

nRegFlags
Pode conter o sinalizador:

  • afxRegApartmentThreading Define o modelo de threading no Registro como ThreadingModel = Apartment.

Observação

Nas versões do MFC anteriores ao MFC 4.2, o int parâmetro nRegFlags não estava disponível. Observe também que o sinalizador afxRegInsertable não é uma opção válida para páginas de propriedade e causará um ASSERT no MFC se ele estiver definido

Valor de retorno

Não zero se a classe de controle foi registrada; caso contrário, 0.

Comentários

Isso permite que a página de propriedades seja usada por contêineres que estejam cientes do controle OLE. AfxOleRegisterPropertyPageClass atualiza o Registro com o nome da página de propriedades e seu local no sistema e também define o modelo de threading compatível com o controle no Registro. Para mais informações, confira Nota Técnica 64, "Threading apartment-model em controles OLE" e Sobre processos e threads no SDK do Windows.

Requisitos

Cabeçalho afxctl.h

AfxOleRegisterTypeLib

Registra a biblioteca de tipos com o banco de dados de registro do Windows e permite que a biblioteca de tipos seja usada por outros contêineres que estejam cientes do controle OLE.

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

Parâmetros

hInstance
O identificador de instância do aplicativo associado à biblioteca de tipos.

tlid
A ID exclusiva da biblioteca de tipos.

pszFileName
Aponta para o nome de arquivo opcional de um arquivo (.TLB) de biblioteca de tipos localizada para o controle.

pszHelpDir
O nome do diretório em que o arquivo de ajuda para a biblioteca de tipos pode ser encontrado. Se NULL, o arquivo de ajuda será considerado no mesmo diretório que a própria biblioteca de tipos.

Valor de retorno

Não zero se a biblioteca de tipos foi registrada; caso contrário, 0.

Comentários

Essa função atualiza o Registro com o nome da biblioteca de tipos e sua localização no sistema.

Exemplo

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

Requisitos

Cabeçalho: afxdisp.h

AfxOleUnregisterClass

Remove a entrada de classe de página de propriedades ou controle do banco de dados de registro do Windows.

BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);

Parâmetros

clsID
A ID de classe exclusiva da página de propriedades ou controle.

pszProgID
A ID de programa exclusiva da página de propriedades ou controle.

Valor de retorno

Não zero se a classe de página de propriedades ou controle tiver sido não registrada com êxito; caso contrário, 0.

Requisitos

Cabeçalho afxctl.h

AfxOleUnregisterTypeLib

Chame essa função para remover a entrada da biblioteca de tipos do banco de dados de registro do Windows.

BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);

Parâmetros

tlID
A ID exclusiva da biblioteca de tipos.

Valor de retorno

Não zero se o registro da biblioteca de tipos tiver sido cancelado com êxito; caso contrário, 0.

Exemplo

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

Requisitos

Cabeçalho: afxdisp.h

Confira também

Macros e Globais