ID do artigo: 815065 - Última revisão: terça-feira, 4 de dezembro de 2007 - Revisão: 5.11

O que é uma DLL?

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo descreve o que é uma biblioteca de vínculo dinâmico (DLL) e os diversos problemas que podem ocorrer ao usar DLLs.

Em seguida, este artigo descreve alguns problemas avançados que você deve considerar ao desenvolver suas próprias DLLs. Descrevendo o que uma DLL é, este artigo descreve métodos de vinculação dinâmicos, dependências DLL, pontos de entrada DLL, exportando funções DLL e ferramentas de solução de problemas de DLL.

Este artigo termina com uma comparação de alto nível das DLLs para o Microsoft .NET Framework assemblies.

INTRODUÇÃO

Para os sistemas operacionais Microsoft Windows que estão listados na seção "Aplica-se a", grande parte da funcionalidade do sistema operacional é fornecida pelas bibliotecas de vínculo dinâmico (DLL). Além disso, quando você executar um programa em um desses sistemas operacionais do Windows, grande parte da funcionalidade do programa pode ser fornecida por DLLs. Por exemplo, alguns programas podem conter muitos diferentes módulos e cada módulo do programa é contido e distribuído em DLLs.

O uso de DLLs ajuda promover modularization de código, reutilização de código, uso de memória eficiente e reduzido espaço em disco. Portanto, o sistema operacional e os programas carregam mais rápido, executados mais rapidamente e levar menos espaço em disco no computador.

Quando um programa usa uma DLL, um problema que é chamado de dependência pode causar a não execução do programa. Quando um programa usa uma DLL, uma dependência é criada. Se outro programa sobrescreve e quebras essa dependência, o programa original não pode executar com êxito.

Com a introdução do Microsoft .NET Framework, a maioria dos problemas de dependência foram eliminados usando assemblies.

Mais Informações

O que é uma DLL?

Uma DLL é uma biblioteca que contém código e dados que podem ser usados por mais de um programa ao mesmo tempo. Por exemplo, em sistemas operacionais Windows, a DLL Comdlg32 executa comuns funções relacionadas à caixa de diálogo. Portanto, cada programa pode usar a funcionalidade contida nessa DLL para implementar uma caixa de diálogo Abrir. Isso ajuda a promover a reutilização de código e uso de memória eficiente.

Usando uma DLL, um programa pode ser modularizado em componentes separados. Por exemplo, um programa de contabilidade pode ser vendido pelo módulo. Cada módulo pode ser carregado em programa principal em tempo de execução se o módulo que está instalado. Porque os módulos são separados, o tempo de carregamento do programa é mais rápido e um módulo é carregado somente quando essa funcionalidade é solicitada.

Além disso, as atualizações são mais fáceis aplicar a cada módulo sem afetar outras partes do programa. Por exemplo, você pode ter um programa de folha de pagamento e taxas de imposto alterar cada ano. Quando essas alterações são isoladas para uma DLL, você pode aplicar uma atualização sem precisar criar ou instalar o programa todo novamente.

A lista a seguir descreve alguns dos arquivos que são implementados como DLLs em sistemas operacionais Windows:
  • Arquivos de controles ActiveX (.ocx)
    Um exemplo de um controle ActiveX é um controle de calendário que permite que você selecione uma data de um calendário.
  • Arquivos do painel de controle (.cpl)
    Um exemplo de um arquivo .cpl é um item localizado no painel de controle. Cada item é uma DLL especializada.
  • Arquivos de driver (.drv) do dispositivo
    Um exemplo de um driver de dispositivo é um driver de impressora que controla a impressão para uma impressora.

Vantagens DLL

A lista a seguir descreve algumas das vantagens que são fornecidas quando um programa usa uma DLL:
  • Usa menos recursos
    Quando vários programas usam a mesma biblioteca de funções, uma DLL pode reduzir a duplicação de código é carregado no disco e na memória física. Isso pode influenciar bastante o desempenho de não apenas o programa que está executando no primeiro plano, mas também outros programas em execução no sistema operacional Windows.
  • Arquitetura modular promotes
    Uma DLL ajuda a promover a desenvolver programas modulares. Isso ajuda a desenvolver programas grandes que necessitam várias versões de idioma ou um programa que requer a arquitetura modular. Um exemplo de um programa modular é um programa de contabilidade que possui muitos módulos que podem ser carregados dinamicamente em tempo de execução.
  • Instalação e implantação simplifica
    Quando uma função dentro de uma DLL precisa uma atualização ou uma correção, implantação e instalação da DLL não requer o programa ser vinculados novamente com a DLL. Além disso, se vários programas usam a mesma DLL, vários programas serão todos beneficiar a atualização ou correção. Esse problema pode ocorrer com mais freqüência quando você usa uma DLL de terceiros que é atualizada regularmente ou fixo.

Dependências DLL

Quando um programa ou uma DLL usa uma função de DLL na DLL de outro, uma dependência é criada. Portanto, o programa não está mais auto-suficientes e o programa pode enfrentar problemas se a dependência é quebrada. Por exemplo, o programa não pode executar se ocorrer uma das seguintes ações:
  • Uma DLL dependente é atualizada para uma nova versão.
  • Uma DLL dependente é fixo.
  • Uma DLL dependente é substituída com uma versão anterior.
  • Uma DLL dependente é removida do computador.
Geralmente, essas ações são conhecidas como conflitos de DLL. Se não for imposta a compatibilidade com versões anteriores, o programa não pode executar com êxito.

A lista a seguir descreve as alterações foram introduzidas no Microsoft Windows 2000 e nos sistemas operacionais do Windows posteriores para ajudar a minimizar problemas de dependência:
  • Proteção de arquivo do Windows
    Em proteção de arquivos do Windows, o sistema operacional impede que o sistema DLLs de sendo atualizado ou excluído por um agente não autorizado. Portanto, quando uma instalação de programa tenta remover ou atualizar uma DLL é definida como uma DLL de sistema, proteção de arquivo do Windows irá procurar uma assinatura digital válida.
  • DLLs particular
    DLLs particular permitem isolar um programa de alterações feitas às DLLs compartilhadas DLLs. Private usar informações específicas da versão ou um arquivo .local vazia para impor a versão da DLL que é usado pelo programa. Para usar DLLs particulares, localize seus DLLs na pasta raiz programa. Para novos programas, adicione informações específicas da versão da DLL. Para programas antigos, use um arquivo .local vazia. Cada método informa ao sistema operacional para usar DLLs particulares que estão localizadas na pasta raiz programa.

Ferramentas de solução de problemas de DLL

Várias ferramentas estão disponíveis para ajudar a solucionar problemas DLL. As ferramentas a seguir são algumas dessas ferramentas.

Dependency Walker

A ferramenta Dependency Walker pode verificação recursivamente para todas as DLLs dependentes são usados por um programa. Quando você abrir um programa no Dependency Walker, o Dependency Walker executa as seguintes verificações:
  • Dependency Walker verifica ausente DLLs.
  • Dependency Walker verifica arquivos de programa ou DLLs não são válidas.
  • Dependency Walker verifica que funções de importar e exportar funções correspondência.
  • Dependency Walker verifica erros de dependência circular.
  • Dependency Walker verifica para módulos que não são válidos porque os módulos são para um sistema operacional diferente.
Usando o Dependency Walker, você pode documentar todas as DLLs que usa um programa. Isso pode ajudar a impedir e corrigir problemas DLL podem ocorrer no futuro. Dependency Walker está localizado no seguinte diretório quando você instala o Microsoft Visual Studio 6.0:
drive\Arquivos visual Studio\Common\Tools

DLL universal problema Solver

A ferramenta Solver de problema universal DLL (DUPS) é usada para auditoria, comparar, documento e exibir informações de DLL. A lista a seguir descreve os utilitários que compõem a ferramenta DUPS:
  • Dlister.exe
    Este utilitário enumera todas as DLLs no computador e registra as informações para um arquivo de texto ou para um arquivo de banco de dados.
  • Dcomp.exe
    Este utilitário compara as DLLs que são listadas em dois arquivos de texto e produz um terceiro arquivo de texto que contém as diferenças.
  • Dtxt2DB.exe
    Este utilitário carrega os arquivos de texto criados usando o utilitário Dlister.exe e o utilitário Dcomp.exe no banco de dados dllHell.
  • DlgDtxt2DB.exe
    Esse utilitário fornece uma versão de interface (GUI) gráfica do usuário do utilitário Dtxt2DB.exe.
Para obter mais informações sobre a ferramenta DUPS, clique no número abaixo para ler o artigo na Base de dados de Conhecimento:
247957  (http://support.microsoft.com/kb/247957/ ) Usando DUPS.exe para resolver problemas de compatibilidade de DLL

Banco de dados DLL ajuda

O banco de dados DLL Ajuda Ajuda a localizar versões específicas de DLLs que são instaladas por produtos de software Microsoft. Para obter mais informações sobre o banco de dados DLL Ajuda, visite o seguinte site:
http://support.microsoft.com/dllhelp/ (http://support.microsoft.com/dllhelp/)

Desenvolvimento de DLL

Esta seção descreve os problemas e requisitos que você deve considerar ao desenvolver suas próprias DLLs.

Tipos de DLLs

Quando você carregar uma DLL em um aplicativo, dois métodos de vinculação permitem que você chamar as funções DLL exportadas. Os dois métodos de vinculação são vinculação dinâmica do tempo de carregamento e a vinculação dinâmica do tempo de execução.
Tempo de carregamento vinculação dinâmica
Em tempo de carregamento dinâmico vinculando, um aplicativo faz chamadas explícitas para funções DLL exportadas como funções locais. Para usar a vinculação dinâmica do tempo de carregamento, fornece um arquivo de cabeçalho (. h) e um arquivo de biblioteca (.lib) importação quando compilar e vincular o aplicativo. Quando você fizer isso, o vinculador fornecerá o sistema com as informações que é necessárias para carregar a DLL e resolver os locais de função DLL exportados em tempo de carga.
Vinculação dinâmica do tempo de execução
No tempo de execução vinculação dinâmica, um aplicativo chama a função LoadLibrary ou função LoadLibraryEx carregar a DLL em tempo de execução. Após a DLL é carregada com êxito, use a função de GetProcAddress para obter o endereço da função DLL exportado que você deseja chamar. Quando você usar a vinculação dinâmica do tempo de execução, você não precisa um arquivo de biblioteca de importação.

A lista a seguir descreve os critérios de aplicativo para quando a vinculação dinâmica do uso tempo de carregamento e quando usar a vinculação dinâmica do tempo de execução:
  • Desempenho de inicialização
    Se o desempenho de inicialização inicial do aplicativo é importante, você deve usar a vinculação dinâmica do tempo de execução.
  • Facilidade de uso
    Tempo de carregamento vinculação dinâmica, as funções exportadas DLL são como funções locais. Isso torna fácil para você chamar essas funções.
  • Lógica de aplicativo
    No tempo de execução vinculação dinâmica, um aplicativo pode branch carregar diferentes módulos conforme necessário. Isso é importante quando você desenvolver versões de vários idiomas.

Ponto de entrada DLL

Quando você cria uma DLL, opcionalmente, você pode especificar uma função de ponto de entrada. A função do ponto de entrada é chamada quando processos ou segmentos se anexam a DLL ou desanexado próprios da DLL. Você pode usar a função do ponto de entrada ao inicializar estruturas de dados ou destruir estruturas de dados conforme exigido pela DLL. Além disso, se o aplicativo é multithreaded, você pode usar o armazenamento local de thread (TLS) para alocar a memória é particular para cada thread a função do ponto de entrada. O código a seguir é um exemplo de função de ponto de entrada DLL.
BOOL APIENTRY DllMain(
HANDLE hModule,	// Handle to DLL module
	DWORD ul_reason_for_call,	// Reason for calling function
	LPVOID lpReserved ) // Reserved
{
	switch ( ul_reason_for_call )
	{
		case DLL_PROCESS_ATTACHED:
		// A process is loading the DLL.
		break;
		case DLL_THREAD_ATTACHED:
		// A process is creating a new thread.
		break;
		case DLL_THREAD_DETACH:
		// A thread exits normally.
		break;
		case DLL_PROCESS_DETACH:
		// A process unloads the DLL.
		break;
	}
	return TRUE;
}
quando a função do ponto de entrada retorna um valor Falso, o aplicativo não será iniciado se você estiver usando vinculação dinâmica do tempo de carregamento. Se você estiver usando vinculação dinâmica do tempo de execução, apenas a DLL individual não será carregado.

A função do ponto de entrada somente deve executar tarefas de inicialização simples e não deve chamar qualquer DLL carregando ou funções de finalização. Por exemplo, na função de ponto de entrada, você não deve direta ou indiretamente chamar a função LoadLibrary ou a função LoadLibraryEx. Além disso, você não deve chamar a função FreeLibrary quando o processo está sendo encerrado.

Observação Em aplicativos multissegmentados, certifique-se de que o acesso para a DLL é sincronizada dados globais (thread safe) para evitar corrupção de dados possíveis. Para fazer isso, use o TLS para fornecer dados exclusivos para cada thread.

Exportando funções DLL

Para exportar funções DLL, adicionar uma palavra-chave de função para as funções exportadas DLL ou criar um arquivo de definição (.def) do módulo que lista as funções DLL exportadas.

Para usar uma palavra-chave de função, você deve declarar cada função que você deseja exportar com a seguinte palavra-chave:
__declspec(dllexport)
Para usar funções exportadas DLL no aplicativo, você deve declarar cada função que você deseja importar com a seguinte palavra-chave:
__declspec(DllImport)
Normalmente, você usaria um arquivo de cabeçalho que tem uma instrução Definir e uma instrução ifdef para separar a instrução de exportação e a instrução de importação.

Você também pode usar um arquivo de definição de módulo para declarar funções DLL exportadas. Quando você usar um arquivo de definição de módulo, não é necessário adicionar a palavra-chave de função para as funções DLL exportadas. No arquivo de definição de módulo, declare a instrução LIBRARY e instrução EXPORTS para a DLL. O código a seguir é um exemplo de um arquivo de definição.
// SampleDLL.def
//
LIBRARY "sampleDLL"

EXPORTS
  HelloWorld

DLL de amostra e aplicativo

No Microsoft Visual C++ 6.0, você pode criar uma DLL selecionando o tipo de projeto de Biblioteca de vínculo dinâmico do Win32 ou o tipo de projeto MFC AppWizard (dll).

O código a seguir é um exemplo de uma DLL que foi criado no Visual C++ usando o tipo de projeto de Biblioteca de vínculo dinâmico do Win32.
// SampleDLL.cpp
//

#include "stdafx.h"
#define EXPORTING_DLL
#include "sampleDLL.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

void HelloWorld()
{
	MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK);
}
// File: SampleDLL.h
//
#ifndef INDLL_H
#define INDLL_H

#ifdef EXPORTING_DLL
extern __declspec(dllexport) void HelloWorld() ;
#else
extern __declspec(dllimport) void HelloWorld() ;
#endif

#endif
O código a seguir é um exemplo de um projeto Win32 Application que chama a função DLL exportada no SampleDLL DLL.
// SampleApp.cpp 
//

#include "stdafx.h"
#include "sampleDLL.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{ 	
	HelloWorld();
	return 0;
}
Observação No tempo de carregamento vinculação dinâmica, você deve vincular o SampleDLL.lib biblioteca de importação é criada quando você cria o SampleDLL projeto.

No tempo de execução vinculação dinâmica, você usar código semelhante ao seguinte código para chamar o SampleDLL.dll exportados função de DLL.
...
typedef VOID (*DLLPROC) (LPTSTR);
...
HINSTANCE hinstDLL;
DLLPROC HelloWorld;
BOOL fFreeDLL;

hinstDLL = LoadLibrary("sampleDLL.dll");
if (hinstDLL != NULL)
{
    HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld");
    if (HelloWorld != NULL)
        (HelloWorld);

    fFreeDLL = FreeLibrary(hinstDLL);
}
...
Quando você compilar e vincular o aplicativo SampleDLL, o sistema operacional Windows procura DLL SampleDLL nos seguintes locais, nesta ordem:
  1. A pasta de aplicativo
  2. A pasta atual
  3. Pasta de sistema do Windows

    Observação A função GetSystemDirectory retorna o caminho da pasta de sistema do Windows.
  4. A pasta Windows

    Observação Função GetWindowsDirectory retorna o caminho da pasta do Windows.

O assembly do .NET Framework

Com a introdução do Microsoft .NET e .NET Framework, a maioria dos problemas associados com DLLs foram eliminada usando assemblies. Um assembly é uma unidade lógica de funcionalidade que é executado sob o controle do .NET common language runtime (CLR). Um assembly fisicamente existe como um arquivo .dll ou como um arquivo .exe. No entanto, internamente um assembly é muito diferente de uma DLL do Microsoft Win32.

Um arquivo do assembly contém um manifesto de assembly, metadados de tipo, código Microsoft intermediate language (MSIL) e outros recursos. O manifesto do assembly contém os metadados de assembly fornecem todas as informações necessárias para um assembly ser autodescritivos. As informações a seguir estão incluídas no manifesto do assembly:
  • Nome do assembly
  • Informações de versão
  • Informações de cultura
  • Informações de nome forte
  • Lista de arquivos assembly
  • Informações de referência de tipo
  • Informações de assembly referenciado e dependentes
O código MSIL contido no assembly não pode ser executado diretamente. Em vez disso, a execução de código MSIL é gerenciada por meio do CLR. Por padrão, quando você criar um assembly, o assembly é particular para o aplicativo. Para criar um assembly compartilhado requer que você atribua um nome forte para o assembly e publica o assembly no global assembly cache.

A lista a seguir descreve alguns dos recursos de assemblies comparados aos recursos de Win32 DLLs:
  • Autodescritivos
    Quando você criar um assembly, todas as informações necessárias para o CLR executar o assembly estão contidas no manifesto do assembly. O manifesto do assembly contém uma lista de assemblies dependentes. Portanto, o CLR pode manter um conjunto consistente de assemblies que são usados no aplicativo. DLLs Win32, você não pode manter a consistência entre um conjunto de DLLs que são usados em um aplicativo quando usar DLLs compartilhadas.
  • Versionamento
    No manifesto do assembly, informações de versão são registradas e impostas pelo CLR. Além disso, versão diretivas permitem impor o uso de versão específico. Em DLLs Win32, versionamento não pode ser imposto pelo sistema operacional. Em vez disso, você deve certificar-se de DLLs são compatíveis com versões anteriores.
  • Implantação de lado a lado
    Assemblies suporte lado a lado implantação. Um aplicativo pode usar uma versão de um assembly e outro aplicativo pode usar uma versão diferente de um assembly. Iniciando no Windows 2000, implantação de lado a lado é suportada pelo localizando DLLs na pasta do aplicativo. Além disso, a proteção de arquivo do Windows impede sistema DLLs de sendo sobrescrito ou substituído por um agente não autorizado.
  • Isolamento e Self-containment
    Um aplicativo desenvolvido usando um assembly pode ser independente e isolada de outros aplicativos em execução no computador. Esse recurso ajuda a criar instalações de impacto a zero.
  • Execução
    Um assembly é executado sob as permissões de segurança que são fornecidos no manifesto do assembly e que são controlados pelo CLR.
  • Independente do idioma
    Um assembly pode ser desenvolvido usando qualquer uma das linguagens com suporte do. NET. Por exemplo, você pode desenvolver um assembly no Microsoft Visual translation from VPE for Csharp e use o assembly no Microsoft Visual Basic .NET projeto.

Referências

Para obter mais informações sobre DLLs e as classes assemblies, visite os seguintes sites:
Conflitos de DLL
http://msdn2.microsoft.com/en-us/library/ms811694.aspx (http://msdn2.microsoft.com/en-us/library/ms811694.aspx)

Implementando compartilhamento em aplicativos de componentes lado a lado
http://msdn2.microsoft.com/en-us/library/ms811700.aspx (http://msdn2.microsoft.com/en-us/library/ms811700.aspx)

Como criar e serviço isolados de aplicativos e assemblies lado a lado para o Windows XP
http://msdn2.microsoft.com/en-us/library/ms997620.aspx (http://msdn2.microsoft.com/en-us/library/ms997620.aspx)

Simplificando a implantação e resolvendo conflitos de DLL com o .NET Framework
http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx (http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx)

Guia do desenvolvedor .NET Framework: assemblies
http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx)

Vinculação dinâmica do tempo de execução
http://msdn2.microsoft.com/en-us/library/ms685090.aspx (http://msdn2.microsoft.com/en-us/library/ms685090.aspx)

Armazenamento local de thread
http://msdn2.microsoft.com/en-us/library/ms686749.aspx (http://msdn2.microsoft.com/en-us/library/ms686749.aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows 2000 Server
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Media Center Edition 2005 Update Rollup 2
  • Microsoft Windows XP Tablet PC Edition
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT 4.0
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Windows 98 Second Edition
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Studio 2005 Express Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Office XP Professional Edition
  • Microsoft Office XP Small Business Edition
  • Microsoft Office XP Standard Edition
  • Microsoft Office Home Edition 2003
  • Microsoft Office Professional Edition 2003
  • Microsoft Office Small Business Edition 2003
  • Microsoft Office Standard Edition 2003
Palavras-chave: 
kbmt kbxplatform kbtshoot kbdebug kbdll kbinfo KB815065 KbMtpt
Tradução automáticaTraduçã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: 815065  (http://support.microsoft.com/kb/815065/en-us/ )