Você recebe uma mensagem de erro "Erro & H80004005 de sistema" de um aplicativo Visual Basic 6.0, quando um subclasses de controle MFC ActiveX qualquer uma das classes janela implementado por Comctl32.dll

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

Neste artigo

Sintomas

Um ActiveX MFC controlar que subclasses qualquer uma das classes janela implementado pelo Comctl32.dll faz com que o seguinte erro a ser lançada de um .exe Visual Basic 6.0.
"Sistema erro & H80004005 (-2147467259). Erro não especificado"
A versão de depuração do controle ActiveX faz com que uma declaração no arquivo Ctlcore.cpp, no final do COleControl::CreateControlWindow, em ou próximo à linha 662.

Esse problema ocorre somente quando você cria um .exe do Visual Basic 6.0 e executá-lo de fora do ambiente de desenvolvimento do Visual Basic.

Causa

Executáveis do Microsoft Visual Basic não inicializar a biblioteca de controle comuns (Comctl32.dll) por padrão, resultando no CreateEx chamada falhando em COleControl::CreateControlWindow. Chamar GetLastError() fornece 0x0000057F - não é possível encontrar classe da janela, que indica a biblioteca de controle comum precisa ser explicitamente inicializados.

Resolução

Dentro de CWinAppEx do seu controle ActiveX, fazer uma chamada para:
InitCommonControls(void)
ou
InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls)
isso garante que Comctl32.dll é carregado e inicializado, independentemente do recipiente o controle está sendo executado no.

Em vez de chamar InitCommonControls do código do controle, você também pode chamá-lo diretamente do aplicativo cliente Visual Basic:
  • Fazer uma declaração geral para o formulário correspondente; por exemplo:
    Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
  • Adicione uma chamada para:
    InitCommonControls
    					
    no método Form_Load.
Em algumas situações, isso pode ser muito tarde inicializar a biblioteca de controles comuns. Portanto, é recomendável adicionar essa chamada no CWinAppEx do controle.

Situação

Esse comportamento é por design.

Mais Informações

Etapas para reproduzir o problema

  1. Usando o Visual C++, Assistente de controle ActiveX MFC, criar um controle padrão.
  2. Na seção configurações de controle do AppWizard (etapa 2 do AppWizard de 6.0 Visual C++), na classe de janela a subclasse, escolha uma das seguintes opções: msctls_hotkey32, msctls_progress32, SysTabControl32 msctls_statusbar32, msctls_trackbar32, msctls_updown32, SysAnimate32, SysHeader32, SysListView32, ou SysTreeView32.
  3. Crie o controle.
  4. Abra o Microsoft Visual Basic 6.0 e crie um novo projeto Standard EXE.
  5. A partir do menu Project , clique em componentes e selecione o controle que você acabou de criar usando Microsoft Visual C++.
  6. Selecione esse controle e desenhar que no formulário de janela.
  7. No menu arquivo , clique em Criar Project.exe e criar o exe.
  8. Vá para o Windows Explorer e execute este executável.

Propriedades

ID do artigo: 223152 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft Foundation Class Library 4.2 nas seguintes plataformas
    • Microsoft Visual C++ 5.0 Standard Edition
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual Basic 5.0 Learning Edition
    • Microsoft Visual Basic 6.0 Learning Edition
    • Microsoft Visual Basic 5.0 Professional Edition
    • Microsoft Visual Basic 6.0 Professional Edition
    • Microsoft Visual Basic 5.0 Enterprise Edition
    • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palavras-chave: 
kbmt kberrmsg kbtshoot kbcmnctrls kbctrl kbprb KB223152 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: 223152

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