Erro: Referenciar bibliotecas de tipos diferentes pode processar um dependente de plataforma executável

Traduções deste artigo Traduções deste artigo
ID do artigo: 281913 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Depois de compilar um projeto Visual Basic que faz referência more than uma biblioteca de tipos em uma plataforma (such as um computador Microsoft_Windows_2000-based), o binário resultante Falha ao executar em outras plataformas (como o Microsoft Windows NT 4-, Microsoft Windows 95-, Microsoft Windows 98 ? e computadores baseados no Microsoft Windows ME) e obtém uma violação de acesso (VA).

Causa

O compilador do Visual Basic diferencia maiúsculas de minúsculas quando ele está lendo as entradas para dllname nas bibliotecas de tipos. Como resultado, se um projeto faz referência a duas ou mais bibliotecas de tipos e a entrada dllname para a mesma DLL é escrita em casos diferentes em diferentes bibliotecas, como dllname("kernel32.dll") na biblioteca A e dllname("KERNEL32.DLL") na biblioteca B, o compilador gera duas seções de importação para a mesma DLL e processa a plataforma binária dependente.

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.

Mais Informações

Etapas para reproduzir o problema

  1. Configure um computador baseado no Windows 2000 e um computador baseado no Windows NT 4, ambos com os service packs mais recentes. Também instale Visual Basic e Visual C++ 6.0 com Service Pack 5 em ambos os computadores.
  2. No computador baseado no Windows 2000, copiar-e-colar a seguinte Interface Description Language (IDL) de código no bloco de notas e salve-o como lcase.idl . Compilá-lo com MIDL.EXE, lcase.idl midl . A biblioteca de tipos resultante é chamada lcase.tlb .
    [
      uuid(D618AA4D-814A-47a2-9AC1-DDE18EDF1C54),
      version(1.0),
      helpstring("Lower case test")
    ]
    library lcasetest
    {
        [
          dllname("kernel32.dll"),
          version(1.0),
          helpstring("Sleep function exported by kernel32.dll")
        ]
        module lcasetest {
            [
    			entry("Sleep"), 
    			helpstring("sleep - lcase test.")
    		]
            void _stdcall Sleep([in] long dwMS);
        };
    };
    					
  3. Como na etapa 1, criar ucase.tlb com o seguinte código IDL:
    [
      uuid(3F215C63-D0AD-4980-93F2-5DDF850061E4),
      version(1.0),
      helpstring("Upper case test")
    ]
    library ucasetest
    {
        [
          dllname("KERNEL32.DLL"),
          version(1.0),
          helpstring("Sleep function exported by kernel32.dll")
        ]
        module lcasetest {
            [
    			entry("Sleep"), 
    			helpstring("sleep - ucase test.")
    		]
            void _stdcall Sleep([in] long dwMS);
        };
    };
    					
  4. Crie um projeto Visual Basic Standard EXE. O Form1 é criado por padrão.
  5. No menu Project , clique para selecionar referências . Na caixa de diálogo referências , vá para lcase.tlb e ucase.tlb , selecione ambas as bibliotecas e, em seguida, clique em OK .
  6. Adicione o seguinte código ao Form1:
    Private Sub Form_Load()
        lcasetest.Sleep 1
        ucasetest.Sleep 1
    End Sub
    					
  7. No menu arquivo , clique para Salvar o projeto e selecione Criar Project1.exe para compilar o projeto.
  8. Execute o executável, Project1.exe e observe que o formulário aparece sem erros.
  9. Copiar Project1.exe para o computador baseado no Windows NT 4 e executar a ele. Observe que ocorre uma violação de acesso.
  10. Copiar e compilar o projeto mesmo no computador Windows_NT_4-based e execute-em tanto os Windows NT 4 e Windows 2000 computadores baseados em. Observe que ele falhar no computador com Windows 2000.

Propriedades

ID do artigo: 281913 - Última revisão: segunda-feira, 24 de fevereiro de 2014 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbbug kbcompiler kbnofix KB281913 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: 281913

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