¿Qué es un archivo DLL?

Seleccione idioma Seleccione idioma
Id. de artículo: 815065 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Este artículo describe lo que es una biblioteca de vínculos dinámicos (DLL) y los distintos problemas que pueden producirse al utilizar archivos DLL.

A continuación, en este artículo se describe algunos temas avanzados que se deben considerar al desarrollar sus propios archivos DLL. En la descripción de lo que un archivo DLL es, en este artículo describe los métodos de vinculación dinámicos las dependencias DLL, puntos de entrada DLL, exportación de funciones DLL y herramientas para solucionar problemas de DLL.

En este artículo finaliza con una comparación de alto nivel de archivos DLL a los ensamblados de Microsoft.NET Framework.

INTRODUCCIÓN

Para los sistemas operativos de Microsoft Windows que se enumeran en la sección "Se refiere a:", gran parte de la funcionalidad del sistema operativo Proporciona bibliotecas de vínculos dinámicos (DLL). Además, cuando se ejecuta un programa en uno de estos sistemas operativos de Windows, gran parte de la funcionalidad de el programa podrá ser servido por archivos DLL. Por ejemplo, algunos programas pueden contener contiene muchos módulos diferentes y cada módulo del programa y se distribuyen en archivos DLL.

El uso de archivos DLL ayuda a promover la modularización de código, reutilización de código, uso eficaz de la memoria y espacio en disco reducido. Por lo tanto, el sistema operativo y los programas se cargan más rápido, se ejecutan más rápidamente y necesitan menos espacio espacio en disco en el equipo.

Cuando un programa utiliza un archivo DLL, un problema que se denomina dependencia puede hacer que el programa no se ejecute. Cuando un programa utiliza un DLL, se crea una dependencia. Si otro programa sobrescribe y rompe esto dependencia, el programa original no puede funcionar correctamente.

Con el Introducción de la de Microsoft.NET Framework, la mayoría de los problemas de dependencia tienen se ha eliminado mediante el uso de ensamblados.

Más información

¿Qué es un archivo DLL?

Un archivo DLL es una biblioteca que contiene el código y datos que pueden ser utilizados por más de un programa al mismo tiempo. Por ejemplo, en el funcionamiento de Windows sistemas, la DLL Comdlg32 de cuadro de diálogo común realiza funciones relacionadas con el cuadro. Por lo tanto, cada programa puede utilizar la funcionalidad contenida en este archivo DLL para implementar un Abierto cuadro de diálogo. Esto ayuda a promover la reutilización de código y el uso eficaz de la memoria.

Mediante el uso de un archivo DLL, puede ser un programa diseño modular en componentes separados. Por ejemplo, puede ser un programa de contabilidad vendido por módulo. Cada módulo se puede cargar en el programa principal en tiempo de ejecución si ese módulo está instalado. Dado que los módulos son independientes, el tiempo de carga el programa es más rápido, y sólo se carga un módulo una vez que la funcionalidad solicitado.

Además, las actualizaciones son más fáciles de aplicar a cada módulo sin que afecte a otras partes del programa. Por ejemplo, puede tener un programa de nóminas y los tipos impositivos cambian cada año. Cuando estos cambios son aislada a un archivo DLL, puede aplicar una actualización sin necesidad de crear o instalar todo el programa otra vez.

En la lista siguiente se describe algunas de las archivos que se implementan como archivos DLL en sistemas operativos Windows:
  • Archivos de controles de ActiveX (.ocx)
    Un ejemplo de un control ActiveX es un calendario de control que permite seleccionar una fecha de un calendario.
  • Archivos (.cpl) del Panel de control
    Un ejemplo de un archivo .cpl es un elemento que se encuentra en Panel de control. Cada elemento es un archivo DLL especializada.
  • Archivos (.drv) de controladores de dispositivo
    Un ejemplo de un controlador de dispositivo es un controlador de impresora que controla la impresión a una impresora.

Ventajas DLL

La siguiente lista describe algunas de las ventajas que están siempre cuando un programa utiliza un archivo DLL:
  • Utiliza menos recursos
    Cuando varios programas usan la misma biblioteca de funciones, un DLL puede reducir la duplicación de código que se carga en el disco y en memoria física. Esto no sólo puede influir en gran medida el rendimiento de la programa que se ejecuta en primer plano, sino también otros programas que están se ejecuta en el sistema operativo Windows.
  • Promueve la arquitectura modular
    Un archivo DLL ayuda a promover el desarrollo de programas modulares. Esto ayuda a desarrollar programas de gran tamaño que requieren varias versiones de idioma o un programa que requiere la arquitectura modular. Un ejemplo de un programa modular es un programa de contabilidad que tiene muchos módulos que se pueden cargar dinámicamente en ejecución hora.
  • Instalación e implementación de las aceleraciones de
    Cuando una función dentro de un archivo DLL necesita una actualización o una corrección, el implementación e instalación de la DLL no requiere el programa para volver a vincular con el archivo DLL. Además, si varios programas utilizan la misma DLL, el varios programas se beneficiarán de la actualización o la revisión. Este problema puede con más frecuencia se producen cuando se utiliza una DLL de terceros que se actualiza con regularidad o fijo.

Dependencias de DLL

Cuando un programa o un archivo DLL utiliza una función DLL en otro archivo DLL, un se crea una dependencia. Por lo tanto, el programa ya no es autónomo, y el programa puede experimentar problemas si se rompe la dependencia. Por ejemplo, el programa puede no funcionar si se produce una de las siguientes acciones:
  • Una DLL dependiente se actualiza a una nueva versión.
  • Se ha corregido una DLL dependiente.
  • Una DLL dependiente se sobrescribe con una anterior versión.
  • Una DLL dependiente se quita del equipo.
Por lo general, estas acciones se conocen como conflictos de DLL. Si con versiones anteriores no se exige la compatibilidad, el programa puede no correctamente ejecutar.

La lista siguiente describe los cambios que se han introducido en Microsoft Windows 2000 y en sistemas operativos de Windows posteriores a ayudar a minimizar los problemas de dependencia:
  • Protección de archivos de Windows
    En protección de archivos de Windows, impide que el sistema operativo sistema de archivos DLL desde la que se actualiza o elimina un agente no autorizado. Por lo tanto, Cuando un programa de instalación intenta quitar o actualizar un archivo DLL que se define como una DLL del sistema, Windows File Protection buscará un digital válido firma.
  • Archivos DLL de Private
    Archivos DLL de Private le permiten aislar un programa a partir de los cambios hecho shared archivos DLL privados de archivos DLL. utilizar información específica de la versión o vacío archivo .local para exigir la versión de la DLL que se utiliza el programa. A utilizar archivos DLL privados, busque los archivos DLL en la carpeta raíz del programa. A continuación, para el nuevo programas, agregar información específica de la versión al archivo DLL. Para los programas antiguos, utilice un archivo .local vacía. Cada método indica el sistema operativo para uso privado Archivos DLL que se encuentran en la carpeta raíz del programa.

Herramientas de solución de problemas de DLL

Varias herramientas están disponibles para ayudarle a solucionar problemas DLL. Las herramientas siguientes son algunas de estas herramientas.

Dependency Walker

El análisis de forma recursiva Dependency Walker can de herramienta para todos los dependientes Archivos DLL utilizados por un programa. Al abrir un programa en Dependency Walker, Dependency Walker realiza las siguientes comprobaciones:
  • Dependency Walker busca archivos DLL que faltan.
  • Dependency Walker busca archivos de programa o archivos DLL que forman no es válido.
  • Dependency Walker comprueba que las funciones de importación y exportación coincide con las funciones.
  • Dependency Walker comprueba si hay dependencia circular errores.
  • Dependency Walker comprueba los módulos que no son válidos Dado que los módulos son para un sistema operativo diferente.
Al utilizar Dependency Walker, puede documentar todos los archivos DLL que un se utiliza el programa. Esto puede ayudar a evitar y corregir problemas DLL que pueden producirse en el futuro. Dependency Walker se encuentra en el siguiente directorio cuando se instalar Microsoft Visual Studio 6.0:
unidadStudio\Common\Tools visual \Program Files\Microsoft

Solucionador de Universal de DLL

La herramienta Solver Universal problema de DLL (duplicados) se utiliza para auditar, comparar, documento y para mostrar información de archivo DLL. La siguiente lista describe las utilidades que constituyen la herramienta de duplicados:
  • Dlister.exe
    Esta utilidad enumera todos los archivos DLL en el equipo y los registros la información a un archivo de texto o a un archivo de base de datos.
  • Dcomp.exe
    Esta utilidad compara los archivos DLL que se enumeran en el texto dos archivos y genera un tercer archivo de texto que contiene las diferencias.
  • Dtxt2DB.exe
    Esta utilidad carga los archivos de texto que se crean mediante el uso de la utilidad de Dlister.exe y la utilidad de Dcomp.exe en el dllHell base de datos.
  • DlgDtxt2DB.exe
    Esta utilidad proporciona una interfaz gráfica de usuario (GUI) versión de la utilidad de Dtxt2DB.exe.
Para Para obtener más información acerca de la herramienta de duplicados, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
247957Uso de DUPS.exe para resolver problemas de compatibilidad DLL

Desarrollo de DLL

Esta sección describen los problemas y los requisitos que se debe tener en cuenta al desarrollar sus propios archivos DLL.

Tipos de archivos DLL

Cuando se carga un archivo DLL en una aplicación, dos métodos para permitir que la vinculación llamar a las funciones DLL exportadas. Los dos métodos de vinculación son el tiempo de carga vinculación dinámica y vinculación dinámica en tiempo de ejecución.
Vinculación dinámica en tiempo de carga
En la vinculación dinámica en tiempo de carga, una aplicación realiza llamadas explícitas para exporta funciones DLL al igual que las funciones locales. Para utilizar el tiempo de carga dinámica vinculación, proporcionar un encabezado (. h) archivo y una biblioteca de importación (.lib) archivo cuando se Compile y vincule la aplicación. Al hacerlo, el vinculador proporcionará la sistema con la información que es necesario para cargar el archivo DLL y resolver el ubicaciones de la función DLL exportados en tiempo de carga.
Vinculación dinámica en tiempo de ejecución
En la vinculación dinámica en tiempo de ejecución, una aplicación llama a la función LoadLibrary o a la función LoadLibraryEx para cargar el archivo DLL en tiempo de ejecución. Después de la DLL función de DLL ha cargado correctamente, utilice la función GetProcAddress para obtener la dirección de la exportación, que que desea llamar. Cuando se utiliza la vinculación dinámica en tiempo de ejecución, no es necesario un Importar archivo de biblioteca.

En la lista siguiente describe la aplicación criterios de cuándo se debe utilizar la vinculación dinámica en tiempo de carga y cuándo se debe utilizar el tiempo de ejecución vinculación dinámica:
  • Rendimiento de inicio
    Si el rendimiento de inicio de la aplicación es importante, que debe utilizar la vinculación dinámica en tiempo de ejecución.
  • Facilidad de uso
    En la vinculación dinámica en tiempo de carga, son las funciones DLL exportadas al igual que las funciones locales. Ello resulta más fácil para llamar a estos funciones.
  • Lógica de la aplicación
    En la vinculación dinámica en tiempo de ejecución, una aplicación puede bifurcar a cargar módulos diferentes según sea necesario. Esto es importante cuando se desarrolla versiones de varios idiomas.

El punto de entrada DLL

Cuando se crea un archivo DLL, opcionalmente, puede especificar un punto de entrada función. La función de punto de entrada se llama cuando procesos o subprocesos adjuntar a sí mismos a la DLL o desasociado a sí mismos desde el archivo DLL. Puede utilizar el función de punto de entrada para inicializar las estructuras de datos o destruir datos estructuras según sea necesario por el archivo DLL. Además, si la aplicación es multiproceso, puede utilizar almacenamiento local de subprocesos (TLS) para asignar la memoria que es privada para cada subproceso de la función de punto de entrada. El código siguiente es un ejemplo de la función de punto 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;
}
Cuando la función de punto de entrada, devuelve un valor FALSE , la aplicación no se iniciará si está utilizando el tiempo de carga vinculación dinámica. Si utiliza vinculación dinámica en tiempo de ejecución, sólo la persona No se cargará la DLL.

Sólo debe realizar la función de punto de entrada simple las tareas de inicialización y no debe llamar a cualquier otro de terminación o cargar el archivo DLL funciones. Por ejemplo, en la función de punto de entrada, debería no directamente o indirectamente, llame a la función LoadLibrary o la función LoadLibraryEx . Además, no debe llamar la función FreeLibrary cuando el proceso está finalizando.

Nota En las aplicaciones multiproceso, asegúrese de que dicho acceso al archivo DLL global de datos está sincronizado (seguro para subprocesos) para evitar la corrupción de datos posibles. A hacer esto, utilice TLS para proporcionar datos únicos para cada subproceso.

Exportar funciones DLL

Para exportar funciones DLL, puede agregar una palabra clave de la función la DLL exporta funciones o crear un archivo de definición (.def) del módulo que se enumeran las funciones DLL exportadas.

Para utilizar una palabra clave de la función, debe Declare cada función que se va a exportar con la siguiente palabra clave:
__declspec (dllexport)
Utilizar funciones DLL exportadas en la aplicación, debe declarar cada función que se va a importar con la siguiente palabra clave:
__declspec (dllimport)
Normalmente, utilizaría un archivo de encabezado que tiene una instrucción de definir y una instrucción ifdef para separar la declaración de exportación y la importación declaración.

También puede utilizar un archivo de definición de módulo para declarar funciones DLL exportadas. Cuando se utiliza un archivo de definición de módulo, no tiene Para agregar la palabra clave function a las funciones DLL exportadas. En el módulo archivo de definición, se declaran la instrucción de biblioteca y la instrucción EXPORTS del archivo DLL. El código siguiente es un ejemplo de un archivo de definición.
// SampleDLL.def
//
LIBRARY "sampleDLL"

EXPORTS
  HelloWorld

Ejemplo de archivo DLL y aplicación

En Microsoft Visual C++ 6.0, puede crear un archivo DLL mediante la selección ya sea el Biblioteca de vínculos dinámicos Win32 tipo de proyecto o la MFC AppWizard (dll) tipo de proyecto.

El siguiente código es un ejemplo de un archivo DLL que se creó en Visual C++ mediante el Biblioteca de vínculos dinámicos Win32 tipo de proyecto.
// 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
El código siguiente es un ejemplo de un Win32 Aplicación proyecto que se llama a la función exportada del archivo DLL en el 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 En la vinculación dinámica en tiempo de carga, debe vincular la SampleDLL.lib biblioteca de importación que se crea cuando se genera el SampleDLL proyecto.

En la vinculación dinámica en tiempo de ejecución, utilice código similar al el siguiente código para llamar a la SampleDLL.dll exporta la función 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);
}
...
Al compilar y vincular la aplicación SampleDLL, las ventanas sistema operativo busca la DLL SampleDLL en las siguientes ubicaciones en en este orden:
  1. La carpeta de aplicación
  2. La carpeta actual
  3. La carpeta de sistema de Windows

    Nota La función GetSystemDirectory devuelve la ruta de acceso del sistema Windows carpeta.
  4. La carpeta de Windows

    Nota La función GetWindowsDirectory devuelve la ruta de acceso de la carpeta de Windows.

El ensamblado de.NET Framework

Con la introducción de Microsoft .NET y el de.NET Framework, la mayoría de los problemas que están asociados con los archivos DLL se ha eliminado por utilizar ensamblados. Un ensamblado es una unidad lógica de funcionalidad que se ejecuta bajo el control de common language runtime (CLR). NET. Un ensamblado existe físicamente como un archivo .dll o como un archivo .exe. Sin embargo, internamente un ensamblado es muy diferente de un archivo DLL de Win32 de Microsoft.

Un ensamblado archivo contiene un manifiesto de ensamblado, metadatos de tipo, intermedio de Microsoft código de Microsoft (MSIL) y otros recursos. El manifiesto del ensamblado contiene el metadatos del ensamblado que proporciona toda la información que se requiere para una ensamblado que se va a autodescriptivo. La siguiente información se incluye en el manifiesto del ensamblado:
  • Nombre del ensamblado
  • Información de versión
  • Información de referencia cultural
  • Información sobre nombre seguro
  • La lista de ensamblados de archivos
  • Información de referencia de tipo
  • Información de ensamblado que se hace referencia y dependientes
El código MSIL que se encuentra en el ensamblado no puede ser ejecutar directamente. En su lugar, la ejecución de código MSIL se administra a través de CLR. Por de forma predeterminada, cuando se crea un ensamblado, el ensamblado es privado para el aplicación. Para crear un ensamblado compartido requiere que asigne un nombre seguro para el ensamblado y, a continuación, publica el ensamblado en el ensamblado global caché.

La siguiente lista describe algunas de las características de los ensamblados en comparación con las características de los archivos DLL de Win32:
  • Autodescriptivos
    Cuando se crea un ensamblado, toda la información que es necesario para el CLR para ejecutar el ensamblado está contenido en el manifiesto del ensamblado. El manifiesto del ensamblado contiene una lista de los ensamblados dependientes. Por lo tanto, el CLR puede mantener un conjunto coherente de ensamblados que se utilizan en la aplicación. En archivos DLL de Win32, no se puede mantener la coherencia entre un conjunto de Archivos DLL que se utilizan en una aplicación al utilizar archivos DLL compartidos.
  • Control de versiones
    En un manifiesto de ensamblado se registra la información de versión y aplicado por el CLR. Además, las directivas de versión le permiten aplicar uso específico de la versión. En archivos DLL de Win32, no se puede aplicar control de versiones mediante la sistema operativo. En su lugar, debe asegurarse de que los archivos DLL son con versiones anteriores es compatible.
  • Implementación de Side-by-side
    Ensamblados admiten la implementación de side-by-side. Una aplicación Puede utilizar una versión de un ensamblado, y otra aplicación puede utilizar una diferente versión de un ensamblado. A partir de Windows 2000, la implementación de side-by-side es compatible con la localización de archivos DLL en la carpeta de la aplicación. Además, Windows Protección de archivos impide las DLL del sistema sobrescrito o reemplazado por un agente no autorizado.
  • Aislamiento y autocontención
    Puede ser una aplicación que se desarrolla utilizando un ensamblado independientes y aisladas de otras aplicaciones que se ejecutan en el equipo. Esta característica le ayuda a crear las instalaciones de impacto cero.
  • Ejecución
    Un ensamblado se ejecuta bajo los permisos de seguridad que se proporcionado en el ensamblado de manifiesto y que están controlados por el CLR.
  • Independiente del lenguaje
    Un ensamblado se puede desarrollar utilizando uno de los admite los lenguajes de. NET. Por ejemplo, puede desarrollar un ensamblado de Microsoft Visual C# y, a continuación, utilice el ensamblado en Microsoft Visual Basic .NET proyecto.

Referencias

Para obtener más información acerca de los archivos DLL y el de.NET Framework ensamblados, visite los siguientes sitios Web de Microsoft:
Conflictos de DLL
http://msdn2.Microsoft.com/en-us/library/ms811694.aspx

Implementar el componente de side-by-side sharing in applications
http://msdn2.Microsoft.com/en-us/library/ms811700.aspx

Cómo generar y servicio de aplicaciones aisladas y ensamblados en paralelo para Windows XP
http://msdn2.Microsoft.com/en-us/library/ms997620.aspx

Simplificación de la implementación y resolver conflictos de DLL con el.NET Framework
http://msdn2.Microsoft.com/en-us/NETFramework/aa497268.aspx

Guía del desarrollador de.NET Framework: ensamblados
http://msdn2.Microsoft.com/en-us/library/hk5f40ct (inglés) .aspx

Vinculación dinámica en tiempo de ejecución
http://msdn2.Microsoft.com/en-us/library/ms685090.aspx

Almacenamiento local de subprocesos
http://msdn2.Microsoft.com/en-us/library/ms686749.aspx

Propiedades

Id. de artículo: 815065 - Última revisión: domingo, 10 de marzo de 2013 - Versión: 7.0
La información de este artículo se refiere 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 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 Workstation 4.0 Developer Edition
  • Microsoft Windows NT Workstation 3.51
  • Microsoft Visual Studio .NET 2003 Professional
  • 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
  • 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
  • Microsoft Visual Studio 6.0 Enterprise
  • 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 Professional Edition 2003
  • Microsoft Office Small Business Edition 2003
Palabras clave: 
kbxplatform kbtshoot kbdebug kbdll kbinfo kbmt KB815065 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 815065

Enviar comentarios

 

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