Registrando uma classe em uma DLL

Traduções deste artigo Traduções deste artigo
ID do artigo: 97758 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Se uma classe é registrada em uma biblioteca de vínculo dinâmico (DLL) com a função RegisterClass() e um aplicativo usa essa classe ao criar uma janela ou uma caixa de diálogo, em seguida, o CreateDialog() ou CreateWindow() chamar no aplicativo falhará. A versão de depuração do Windows irá produzir um código de saída fatal 0x8800 com a seguinte mensagem:
CreateWindow falhou: classe de janela não encontrado.
Uma das seguintes pode gerar esta mensagem:

  • A classe da janela na DLL não foi registrada corretamente com o estilo de classe CS_GLOBALCLASS. Sem esse estilo de classe, uma classe não pode ser acessada globalmente por todos os aplicativos que vinculam a dll. - ou -

  • A DLL não é carregada na memória e, portanto, a classe não está acessível. Isso acontecerá se o aplicativo implicitamente links para a DLL e nenhuma das funções exportadas na DLL é explicitamente chamada no aplicativo. Para contornar este problema, a DLL deve fornecer um ponto de entrada para o aplicativo chamar ou o aplicativo deve explicitamente carregar e liberar a biblioteca.

Mais Informações

Para registrar uma classe de janela em uma DLL e, em seguida, criar uma janela (ou criar uma caixa de diálogo) dessa classe em qualquer aplicativo que vincula essa DLL, a classe da janela deve ser registrada com o estilo de classe CS_GLOBALCLASS. Esse estilo Especifica que a classe de janela é uma classe global do aplicativo e permitirá que esta classe para serem acessados globalmente por todos os aplicativos. O estilo de classe CS_GLOBALCLASS documentado no Windows versão 3.1 SDK "referência do programador, volume 1: Visão geral," manual na página 19 sob a seção de estilos de classe.

Deve ter cuidado para garantir que uma classe global do aplicativo não é acessada depois encerra a DLL (que registrado ele). Portanto, ao fazer isso gerará uma mensagem de saída fatal 0x001A na versão de depuração do Windows. Para obter mais informações sobre esse tópico, consulte as seguintes palavras na Base de dados de Conhecimento da Microsoft:
saída fatal e 0x001A
Depois de registrar a classe de janela usando o estilo de classe CS_GLOBALCLASS, chamar CreateWindow ou CreateDialog a partir de um aplicativo deve funcionar corretamente. No entanto, se a intenção é ter a DLL que possui a fila de mensagens, isso não será possível. O motivo é que DLLs, sendo taskless entidades, são criadas para ser recursos ou para fornecer apenas recursos e funções; elas não são capazes de manipular o processamento de mensagem. Essa funcionalidade deve ser implementada em um aplicativo.

Além disso, observe que com o Windows versão 3.0, há um problema na destruição windows cuja classe de janela foi registrado com o estilo de classe CS_GLOBALCLASS por uma DLL (ou um aplicativo). Esse problema foi corrigido no Windows versão 3.1. Para obter mais informações sobre esse problema e uma solução, consulta as seguintes palavras na Base de dados de Conhecimento da Microsoft:
Sair e janelas e instanced DLL
Depois da classe está registrada corretamente com o estilo CS_GLOBALCLASS na DLL, para qualquer aplicativo pode usá-lo, desde que a DLL é carregada na memória. Esse problema é uma preocupação em casos onde a DLL é usada apenas para registrar classes (por exemplo, em LibMain) que podem ser usados por todos os aplicativos (por exemplo, bibliotecas de controle personalizado). Porque a DLL não contém pontos de entrada qualquer função que o aplicativo pode chamar, há não chamada dependências entre o aplicativo e a DLL e, portanto, a DLL não será carregada implicitamente. Nesse caso, a solução é que a DLL deve fornecer um ponto de entrada que o aplicativo pode chamar ou o aplicativo deve explicitamente carregar e sem a biblioteca usando LoadLibrary e FreeLibrary interfaces de programa aplicativo (APIs).

Propriedades

ID do artigo: 97758 - Última revisão: quinta-feira, 30 de outubro de 2003 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Windows Software Development Kit 3.0
  • Microsoft Windows Software Development Kit 3.1
Palavras-chave: 
kbmt kb16bitonly KB97758 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 97758
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com