Erro: Referência a bibliotecas de tipos diferentes pode gerar um dependente Platform executável

Traduções de Artigos Traduções de Artigos
Artigo: 281913 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Depois de compilar um projecto de Visual Basic que referencia mais do que uma biblioteca de tipos numa um plataforma (tal como um computador baseado no Microsoft Windows 2000), o binário resultante não consegue executar outras plataformas (tal como o Microsoft Windows NT 4-, Microsoft Windows 95-, Microsoft Windows 98- e computadores baseados no Microsoft Windows ME) e recebe uma violação de acesso (AV).

Causa

O compilador de Visual Basic é sensível a quando está a ler entradas para nomedll em bibliotecas de tipos. Como resultado, se dois ou mais bibliotecas faz referência a um projecto e a entrada nomedll para a mesma DLL estiver 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 secções de importação para a mesma DLL e compõe a plataforma binária dependentes.

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo.

Mais Informação

Passos para reproduzir o comportamento

  1. Configure um computador baseado no Windows 2000 e um computador baseado no Windows NT 4, ambos com os service packs mais recentes. Instale também 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 IDL (seguinte Interface Description Language) de código no bloco de notas e guardá-lo como lcase.idl . Compilá-lo com MIDL.EXE, midl lcase.idl . Biblioteca de tipos resultante é denominada 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 no passo 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 projecto executável padrão do Visual Basic. É criado o Form1 por predefinição.
  5. No menu projecto , clique para seleccione References . No caixa de diálogo referências , procure lcase.tlb e ucase.tlb , seleccione 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 ficheiro , clique para Guardar o projecto e, em seguida, seleccione Criar Project1.exe para compilar o projecto.
  8. Execute o executável, Project1.exe e repare que o formulário é apresentada sem erros.
  9. Copie Project1.exe para o computador baseado no Windows NT 4 e executá-la. Repare que ocorre uma violação de acesso.
  10. Copiar e compilar o mesmo projecto num computador baseado no Windows NT 4 e executá-la nos Windows NT 4 e Windows 2000-computadores baseados em. Tenha em atenção que falhar num computador baseado no Windows 2000.

Propriedades

Artigo: 281913 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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