CORRECÇÃO: Uma DLL que usa a classe CImage ATL pode causar um deadlock em um processo

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

Neste artigo

Sintomas

Uma DLL que está usando a classe de ATL (Active Template Library) CImage pode causar um deadlock quando é descarregado de um processo ou quando o processo de carregamento é desligado.

Causa

Esse problema ocorre porque a classe CImage inicializa e desliga GDI + usando a classe aninhada estática CInitGDIPlus . Essa classe inicializa GDI + antes de qualquer função CImage que requer que GDI + é chamado. GDI + é desligado chamando GdiplusShutdown quando a classe CInitGDIPlus é destruída. CInitGDIPlus é uma classe estática que destruídas em uma DLL no contexto de DllMain . A documentação declara que não é possível chamar GdiplusShutdown no DllMain .

Resolução

Informações do service pack

Para resolver esse problema, obtenha o service pack mais recente para o Microsoft Visual Studio. NET. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
837234Lista de bugs corrigidos no Visual Studio .NET 2002 1

Informações sobre o hotfix

Para obter mais informações sobre esse hotfix, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
326459Comparação COleDateTime declarações ou retorna o valor incorreto

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft que estão listados na seção "Aplica-se a" deste artigo. Esse problema foi corrigido primeiro no Visual Studio .NET 2002 1.

Mais Informações

Passos para reproduzir o problema

  1. Criar um projeto ATL DLL chamado Control_Name .htm e, em seguida, inserir um ActiveX controle.
  2. Adicione um membro CImage à classe de controle ActiveX.
  3. Chame CImage::Load no construtor de classe do controle ActiveX.
  4. Exibir a página .htm que você criou para o controle (Control_Name .htm) no Microsoft Internet Explorer.
  5. Feche o Internet Explorer. Você deve ter um dos seguintes condições:
    • Não é possível iniciar o Internet Explorer novamente.

      - ou -
    • O processo IExplore.exe ainda aparece no Gerenciador de tarefas.

Propriedades

ID do artigo: 322909 - Última revisão: terça-feira, 27 de setembro de 2005 - Revisão: 7.1
A informação contida neste artigo aplica-se a:
  • The Microsoft Active Template Library (ATL) 7.0 nas seguintes plataformas
    • Microsoft Visual Studio .NET 2002 Enterprise Architect
    • Microsoft Visual Studio .NET 2002 Enterprise Developer
    • Microsoft Visual Studio .NET 2002 Professional Edition
    • Microsoft Visual Studio .NET 2002 Academic Edition
Palavras-chave: 
kbmt kbhotfixserver kbqfe kbvs2002sp1sweep kbvs2002sp1fix kbbug kbfix KB322909 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: 322909

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