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 | Reduzir tudo

Sumário

Este artigo descreve o que uma biblioteca de ligação dinâmica (DLL) é e os vários problemas que poderão ocorrer quando utilizar DLLs.

Em seguida, este artigo descreve alguns problemas avançados que deve considerar quando desenvolver as suas próprias dll. Na descrição que uma DLL é, este artigo descreve métodos de ligação dinâmicos, dependências DLL, pontos de entrada DLL, exportar DLL ferramentas de resolução de problemas e funções DLL.

Este artigo termina com uma comparação de alto nível de dll para o Microsoft .NET Framework assemblagens.

INTRODUÇÃO

Para os sistemas operativos Microsoft Windows que estão listados na secção "Aplica-se a", muitas das funcionalidades do sistema operativo é fornecida por bibliotecas de ligação dinâmica (DLL). Além disso, quando executa um programa destes sistemas operativos Windows, muitas das funcionalidades do programa podem ser fornecida por dll. Por exemplo, alguns programas poderão conter muitos módulos diferentes e cada módulo do programa está contido e distribuído de dll.

A utilização das DLLs ajuda-o a promover modularization do código, reutilização do código, utilização da memória eficiente e reduzida de espaço em disco. Por conseguinte, o sistema operativo e os programas carregam mais rapidamente, executado mais rapidamente e demorar menos espaço em disco no computador.

Quando um programa utiliza uma DLL, um problema que é designado por dependência pode fazer com que o programa não para ser executado. Quando um programa utiliza uma DLL, é criada uma dependência. Se outro programa substitui e divide esta dependência, o programa original não é executada com êxito.

Com a introdução do Microsoft .NET Framework, a maior parte dos problemas de dependência ter sido eliminado através da utilização de assemblagens.

Mais Informação

O que é uma DLL?

Uma DLL é uma biblioteca que contém o código e dados que podem ser utilizados por mais do que um programa ao mesmo tempo. Por exemplo, pela sistemas operativos Windows, a DLL de Comdlg32 efectua comuns funções relacionadas com caixa de diálogo. Por conseguinte, cada programa pode utilizar a funcionalidade que está contida nesta DLL para implementar uma caixa de diálogo Abrir. Isto ajuda a promover a reutilização do código e utilização eficaz da memória.

Utilizando uma DLL, um programa pode ser modularized em componentes separados. Por exemplo, um programa de gestão de contas pode ser vendido por módulo. Cada módulo pode ser carregado num programa principal em tempo de execução de se esse módulo estiver instalado. Uma vez que os módulos são separados, o tempo de carregamento do programa é mais rápido e um módulo só é carregado quando essa funcionalidade é pedida.

Além disso, as actualizações são mais fáceis de aplicar cada módulo sem afectar outras partes do programa. Por exemplo, poderá ter um programa de folha de vencimentos, e as taxas de imposto sobre alterar cada ano. Quando estas alterações estão isoladas para uma DLL, pode aplicar uma actualização sem necessitar de criar ou instalar novamente o programa completo.

A lista seguinte descreve alguns dos ficheiros que são implementados como DLLs em sistemas operativos Windows:
  • Ficheiros de controlos ActiveX (.ocx)
    Um exemplo de um controlo ActiveX é um controlo de calendário que lhe permite seleccionar uma data de um calendário.
  • Ficheiros do painel de controlo (.cpl)
    Um exemplo de um ficheiro .cpl é um item que está localizado no painel de controlo. Cada item é uma DLL especializada.
  • Ficheiros de controlador (.drv) de dispositivo
    Um exemplo de um controlador de dispositivo é um controlador de impressora que controla a impressão numa impressora.

Vantagens DLL

A lista seguinte descreve algumas das vantagens que são fornecidas quando um programa utiliza uma DLL:
  • Utiliza menos recursos
    Quando vários programas utilizam a mesma biblioteca de funções, uma DLL pode reduzir a duplicação de código que é carregado no disco e na memória física. Isto pode influenciar bastante o desempenho do não apenas o programa que está a ser executado no primeiro plano, mas outros programas que estão em execução no sistema operativo Windows.
  • Arquitectura modular Promotes
    Uma DLL de ajuda a promover a desenvolver programas modulares. Isto ajuda-o a desenvolver programas grandes que necessitem de várias versões de idioma ou um programa que necessite de arquitectura modular. Um exemplo de um programa modular é um programa de gestão de contas que tenha muitos módulos que podem ser dinamicamente carregados durante o tempo de execução.
  • Instalação e implementação de facilita
    Quando uma função dentro de uma DLL necessita de uma actualização ou uma correcção, a implementação e instalação da DLL não requer o programa para ser relinked com a DLL. Além disso, se múltiplos programas utilizam a mesma DLL, vários programas todas beneficiará da actualização ou a correcção. Este problema poderá ocorrer com mais frequência quando utiliza uma DLL de outros fabricantes que é regularmente actualizada ou fixo.

Dependências DLL

Quando um programa ou uma DLL utiliza uma função de DLL na DLL de outro, é criada uma dependência. Por conseguinte, o programa já não é autónomo e o programa poderá ter problemas se a dependência é interrompida. Por exemplo, o programa poderá não ser executado se ocorrer uma das seguintes acções:
  • Uma DLL dependente é actualizada para uma nova versão.
  • Uma DLL dependente é fixa.
  • Uma DLL dependente é substituída com uma versão anterior.
  • Uma DLL dependente é removida do computador.
Estas acções são geralmente conhecidas como conflitos DLL. Se não é imposta a compatibilidade com versões anteriores, o programa não poderá executada com êxito.

A lista seguinte descreve as alterações que foram introduzidas no Microsoft Windows 2000 e no posteriores sistemas operativos do Windows para ajudar a minimizar os problemas de dependência:
  • Protecção de ficheiros do Windows
    Protecção de ficheiros do Windows, o sistema operativo impede a dll sejam actualizados ou eliminados por um agente não autorizado de sistema. Por conseguinte, quando uma programa de instalação tenta remover ou actualizar uma DLL que é definida como uma DLL do sistema, protecção de ficheiros do Windows irá procurar uma assinatura digital válida.
  • DLL de privada
    Privada DLLs permitem isolar um programa a partir de alterações efectuadas a DLL partilhado DLLs. Private utilizar informações específicas de versão ou um ficheiro .local vazio para impor a versão da DLL que é utilizado pelo programa. Para utilizar DLLs privadas, localize as DLLs na pasta de raiz do programa. Em seguida, para novos programas, adicione informações específicas de versão para a DLL. Para programas antigos, utilize um ficheiro .local vazia. Cada método indica ao sistema operativo para utilizar as DLL privadas que se encontram na pasta de raiz do programa.

Ferramentas de resolução de problemas de DLL

Várias ferramentas estão disponíveis para ajudar a resolver problemas DLL. As seguintes ferramentas estão algumas destas ferramentas.

Dependência Walker

A ferramenta Dependency Walker pode recursivamente digitalização para todas as DLLs dependentes são utilizados por um programa. Quando abrir um programa no Dependency Walker, Dependency Walker efectua as seguintes verificações:
  • Dependência Walker verifica em falta dll.
  • Dependência Walker verifica a existência de ficheiros de programa ou DLLs que não são válidas.
  • Dependência Walker verifica que funções de importação e exportação de correspondência de funções.
  • Dependência Walker verifica a existência de erros de dependência circular.
  • Dependência Walker verifica a existência de módulos que não são válidos porque os módulos são para um sistema operativo diferente.
Utilizando o Dependency Walker, pode documentar todas as DLLs que utiliza um programa. Isto pode ajudar a evitar e corrigir problemas DLL que poderão ocorrer no futuro. Dependência Walker encontra-se no seguinte directório quando instala o Microsoft Visual Studio 6.0:
drive\Programas\Microsoft visual Studio\Common\Tools

DLL universal problema Solver

A ferramenta de DLL universal problema Solver (DUPS) é utilizada para auditar, comparar, documento e apresentar informações de DLL. A lista seguinte descreve os utilitários que constituem a ferramenta DUPS:
  • Dlister.exe
    Este utilitário enumera todas as DLLs no computador e regista as informações para um ficheiro de texto ou para um ficheiro de base de dados.
  • Dcomp.exe
    Este utilitário compara as DLL são listadas nos dois ficheiros de texto e produz um terceiro ficheiro de texto que contém as diferenças.
  • Dtxt2DB.exe
    Este utilitário carrega os ficheiros de texto que são criados utilizando o utilitário de Dlister.exe e o utilitário de Dcomp.exe na base de dados dllHell.
  • DlgDtxt2DB.exe
    Este utilitário fornece uma versão de interface (GUI) gráfica de utilizador do utilitário Dtxt2DB.exe.
Para obter mais informações sobre a ferramenta DUPS, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
247957  (http://support.microsoft.com/kb/247957/ ) Utilizando DUPS.exe para resolver problemas de compatibilidade DLL

DLL de ajuda da base de dados

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

Desenvolvimento de DLL

Esta secção descreve os problemas e os requisitos que deve considerar quando desenvolver as suas próprias dll.

Tipos de DLLs

Quando carregar uma DLL num aplicativo, dois métodos de ligação permitem-lhe chamar as funções DLL exportadas. Os dois métodos de ligação são tempo de carregamento dinâmico ligar e tempo de execução dinâmico ligar.
Tempo de carregamento dinâmico ligar
No tempo de carregamento dinâmico ligar, uma aplicação efectua chamadas explícitas para funções DLL exportadas como funções locais. Para utilizar o tempo de carregamento dinâmico ligar, fornecer um ficheiro de cabeçalho (.h) e um ficheiro de importação de biblioteca (.lib) quando compilar e ligar a aplicação. Quando fizer isto, o linker irá fornecer o sistema com as informações que é necessárias para carregar a DLL e resolver as localizações de função DLL exportadas ao tempo de carregamento.
Tempo de execução dinâmico ligar
No tempo de execução dinâmico ligar, uma aplicação chama a função de LoadLibrary ou a função LoadLibraryEx para carregar a DLL em tempo de execução. Depois da DLL é carregada com êxito, utilize a função de GetProcAddress para obter o endereço da função DLL exportado que pretende chamar. Quando utiliza o tempo de execução dinâmico ligar, não é necessário um ficheiro de biblioteca de importação.

A lista seguinte descreve os critérios de aplicação para quando para utilizar tempo de carregamento dinâmico ligar e quando utilizar o tempo de execução dinâmico ligar:
  • Desempenho de arranque
    Se o desempenho do arranque inicial da aplicação é importante, deverá utilizar a ligação dinâmica run-time.
  • Facilitar a utilização de
    No tempo de carregamento dinâmico ligar, as funções DLL exportadas são como funções locais. Isto torna mais fácil chamar estas funções.
  • Lógica da aplicação
    No tempo de execução dinâmico ligar, uma aplicação pode sucursais para carregar diferentes módulos conforme necessário. Isto é importante quando desenvolver versões de múltiplos idiomas.

O ponto de entrada da DLL

Quando cria uma DLL, opcionalmente, pode especificar uma função de ponto de entrada. A função de ponto de entrada é chamada quando processos ou threads anexar próprios a DLL ou desligado próprios da DLL. Pode utilizar a função de ponto de entrada para inicializar estruturas de dados ou para destruir estruturas de dados conforme requerido pela DLL. Além disso, se a aplicação for multithread, pode utilizar o armazenamento local do thread (TLS) ao atribuir memória é privada para cada thread a função de ponto de entrada. O código seguinte é 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 de ponto de entrada devolve um valor Falso, a aplicação não será iniciado se estiver a utilizar o tempo de carregamento dinâmico ligar. Se estiver a utilizar o tempo de execução dinâmico ligar, apenas a DLL individual não será carregado.

A função de ponto de entrada apenas deve efectuar tarefas de inicialização simples e não deve chamar qualquer DLL carregar ou funções de terminação. Por exemplo, na função de ponto de entrada, deve não directa ou indirectamente chamar a função LoadLibrary ou a função LoadLibraryEx. Além disso, não deverá chamar a função de FreeLibrary quando o processo está a terminar.

Nota Aplicações multithread, certifique-se que o acesso para a DLL é sincronizada dados globais (prova de thread) para evitar danos nos dados possíveis. Para efectuar este procedimento, utilize TLS para fornecer dados exclusivos para cada thread.

Funções DLL a exportar

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

Para utilizar uma palavra-chave de função, tem de declarar cada função que pretende exportar com a palavra-chave seguinte:
__declspec(dllexport)
Para utilizar funções DLL exportadas na aplicação, tem de declarar cada função que pretende importar com a palavra-chave seguinte:
__declspec(DllImport)
Normalmente, utilizaria um ficheiro de cabeçalho que possui uma instrução de Definir e uma instrução de ifdef para separar a declaração de exportação e a declaração de importação.

Também pode utilizar um ficheiro de definição do módulo para declarar funções exportadas da DLL. Quando utiliza um ficheiro de definição do módulo, não é necessário adicionar a palavra-chave de função para as funções DLL exportadas. No ficheiro de definição do módulo, declarar a instrução de biblioteca e a instrução EXPORTA para a DLL. O código seguinte é um exemplo de um ficheiro de definição.
// SampleDLL.def
//
LIBRARY "sampleDLL"

EXPORTS
  HelloWorld

DLL de exemplo e aplicação

No Microsoft Visual C++ 6.0, pode criar uma DLL, seleccionando o tipo de projecto Win32 Dynamic-Link Library ou o tipo de projecto MFC AppWizard (dll).

O código seguinte é um exemplo de uma DLL que foi criada no Visual C++ utilizando o tipo de projecto Win32 Dynamic-Link Library.
// 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 seguinte é um exemplo de um projecto de Aplicação de Win32 que chama a função DLL exportada na DLL SampleDLL.
// SampleApp.cpp 
//

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

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{ 	
	HelloWorld();
	return 0;
}
Nota No tempo de carregamento dinâmico ligar, tem de ligar o SampleDLL.lib biblioteca de importação que é criada quando criar o SampleDLL projecto.

No tempo de execução dinâmico ligar, utilizar 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 compilar e ligar a aplicação de SampleDLL, procura o sistema operativo Windows para a DLL de SampleDLL nas seguintes localizações por esta ordem:
  1. A pasta de aplicação
  2. A pasta actual
  3. A pasta de sistema do Windows

    Nota A função de GetSystemDirectory devolve o caminho da pasta de sistema do Windows.
  4. A pasta do Windows

    Nota A função GetWindowsDirectory devolve o caminho da pasta do Windows.

Assemblagem da .NET Framework

Com a introdução do Microsoft .NET e o .NET Framework, a maior parte dos problemas que estão associados com DLLs ter sido eliminado através da utilização de assemblagens. Uma assemblagem é uma unidade lógica de funcionalidade que é executado sob o controlo do .NET common language runtime (CLR). Uma assemblagem existe fisicamente como um ficheiro .dll ou como um ficheiro .exe. No entanto, internamente uma assemblagem é muito diferente de uma DLL de Win32 da Microsoft.

Um ficheiro de assemblagem contém um manifesto de assemblagem, metadados de tipo, código de idioma intermédio (MSIL) do Microsoft e outros recursos. O manifesto de assemblagem contém os metadados da assemblagem que fornece todas as informações que é necessárias para uma assemblagem para ser self-describing. As seguintes informações estão incluídas no manifesto da assemblagem:
  • Nome da assemblagem
  • Informações sobre a versão
  • Informações de idioma
  • Informações de nome seguro
  • A lista de assemblagem de ficheiros
  • Tipo de informações de referência
  • Informações de assemblagem referenciada e dependentes
O código MSIL contido na assemblagem não pode ser executado directamente. Em vez disso, a execução de código MSIL é gerida através o CLR. Por predefinição, quando criar uma assemblagem a assemblagem é privada para a aplicação. Para criar uma assemblagem partilhada requer que atribuir um nome seguro à assemblagem e, em seguida, publicar a assemblagem na cache de assemblagem global.

A lista seguinte descreve algumas das funcionalidades de assemblagens comparado comparadas as funcionalidades das DLLs de Win32:
  • Self-describing
    Quando cria uma assemblagem, todas as informações que é necessárias para o CLR executar a assemblagem estão contidas no manifesto da assemblagem. O manifesto da assemblagem contém uma lista de assemblagens dependentes. Assim, o CLR pode manter um conjunto consistente de assemblagens utilizado na aplicação. Na DLL Win32, não é possível manter a consistência entre um conjunto de DLLs que são utilizados numa aplicação quando utilizar DLLs partilhadas.
  • Actualização de versões
    No manifesto de assemblagem, informações sobre a versão é gravada e imposta pelo CLR. Além disso, as políticas de versão permitem-lhe impor a utilização da versão específicas. Em dll Win32, versões não podem ser imposta pelo sistema operativo. Em vez disso, tem de certificar-se de que DLLs são compatíveis com versões anteriores.
  • Implementação de lado a lado
    Assemblagens suportam a implementação de lado a lado. Uma aplicação pode utilizar uma versão de uma assemblagem e outra aplicação pode utilizar uma versão diferente de uma assemblagem. Implementação side-by-side iniciar no Windows 2000, é suportada pelo localizar DLLs na pasta da aplicação. Além disso, a protecção de ficheiros do Windows impede dll sejam substituídas ou substituído por um agente não autorizado de sistema.
  • Isolamento e Self-containment
    Uma aplicação que desenvolvidas utilizando uma assemblagem pode ser autónomo e isolada de outras aplicações em execução no computador. Esta funcionalidade ajuda-o a criar instalações do impacto de zero.
  • Execução
    Uma assemblagem é executada sob as permissões de segurança que são fornecidos no manifesto de assemblagem e que são controlados pelo CLR.
  • Independente do idioma
    Uma assemblagem pode ser desenvolvida utilizando qualquer um dos idiomas suportados do .NET. Por exemplo, pode desenvolver uma assemblagem no Microsoft Visual C# e, em seguida, utilizar a assemblagem em Microsoft Visual Basic .NET projecto.

Referências

Para obter mais informações sobre DLLs e o .NET Framework assemblagens, visite os seguintes Web sites da Microsoft:
Conflitos DLL
http://msdn2.microsoft.com/en-us/library/ms811694.aspx (http://msdn2.microsoft.com/en-us/library/ms811694.aspx)

Implementar componente side-by-side partilha nas aplicações
http://msdn2.microsoft.com/en-us/library/ms811700.aspx (http://msdn2.microsoft.com/en-us/library/ms811700.aspx)

Como criar e serviço isolado aplicações e assemblagens 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)

Simplificar a implementação e resolução de conflitos 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 programador do .NET Framework: assemblagens
http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx)

Tempo de execução dinâmico ligar
http://msdn2.microsoft.com/en-us/library/ms685090.aspx (http://msdn2.microsoft.com/en-us/library/ms685090.aspx)

Thread de armazenamento local
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
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003 Standard Edition
  • 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 Edition
  • 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 Segunda Edição
  • 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 Studio 6.0 Professional Edition
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Studio 2005 Express Edition
  • Microsoft Visual Studio 2005 Professional
  • 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 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: 815065  (http://support.microsoft.com/kb/815065/en-us/ )