Select the product you need help with
PROBLEMA: Chamada LoadLibrary() para carregar uma DLL com TLS estáticoArtigo: 118816 - Ver produtos para os quais este artigo se aplica. SintomasUma biblioteca de ligação dinâmica (DLL) utiliza __declspec (thread) para atribuir o armazenamento local de thread estático (TLS). Existem sem problemas associados à execução uma aplicação que está ligada com a biblioteca estática correspondente. No entanto, quando uma aplicação utiliza a função LoadLibrary carregar a DLL em vez de utilizar a versão estática, LoadLibrary falhar no Win32s com um código de erro 87: parâmetro inválido. LoadLibrary com êxito num computador com o Windows 98, Windows NT ou Windows 2000 nesta situação. No entanto, o comportamento de chamar funções na DLL que referenciam variáveis TLS estáticas é indefinido. No Microsoft Windows 95, falha de LoadLibrary e GetLastError funcionam devolve 1114 - ERROR_DLL_INIT_FAILED (uma rotina de inicialização de biblioteca de ligação dinâmica falhou). No Windows 2000, a função LoadLibrary com êxito. No entanto, qualquer tentativa de aceder aos dados TLS provoca uma violação de acesso (AV). CausaEsta é uma limitação de LoadLibrary e __declspec . O espaço variável global para um thread é atribuído no tempo de execução. O tamanho se baseia um cálculo de requisitos da aplicação em conjunto com os requisitos de todas as bibliotecas estaticamente ligadas. Se uma DLL utiliza a TLS estático e é ligado dinâmicos numa aplicação, quando é chamado LoadLibrary ou FreeLibrary , o sistema deve encontrar todos os threads que existam no processo e ampliar ou compactar as respectivas memória TLS acordo com para o tamanho de TLS estático na DLL recentemente carregado. Este processo é muito para sistemas operativos gerir, que pode causar uma excepção quando a DLL é carregada dinamicamente ou código referências as dados. ResoluçãoDLL que utilizam __declspec (thread) não devem ser carregadas com LoadLibrary . O código DLL deve ser modificado para utilizar estas funções TLS como TlsAlloc e atribuir TLS se pode ser carregada a DLL com LoadLibrary . Ou, a DLL que está a utilizar __declspec (thread) deve apenas ser implicitamente carregada para a aplicação. Mais InformaçãoPara determinar se uma DLL utiliza TLS estático, a ferramenta de Dumpbin.exe pode ser utilizada para copiar as informações do cabeçalho. Uma DLL tem TLS estáticas se HEADER valores OPCIONAIS contém um tamanho superior a 0 (zero) no directório de armazenamento de thread, da seguinte forma: 517B20 [18] RVA [tamanho] do thread do armazenamento PropriedadesArtigo: 118816 - Última revisão: terça-feira, 21 de Novembro de 2006 - Revisão: 3.2 A informação contida neste artigo aplica-se a:
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: 118816
(http://support.microsoft.com/kb/118816/en-us/
)
| Traduções de Artigos
|




Voltar ao topo








