DetailPage-MSS-KB

Microsoft Knowledge Base

Identificativo articolo: 815065 - Ultima modifica: martedì 4 dicembre 2007 - Revisione: 5.11

 

In questa pagina

Sommario

In questo articolo viene descritto che cos'è una libreria a collegamento dinamico (DLL) e i vari problemi che possono verificarsi quando si utilizzano la DLL.

Quindi, in questo articolo vengono descritti alcuni problemi avanzati da prendere in considerazione quando si sviluppa la propria DLL. In che descrive quale DLL è, in questo articolo vengono descritti metodi di collegamento dinamici, le dipendenze DLL punti di ingresso DLL, l'esportazione di funzioni di DLL e DLL strumenti per la risoluzione dei problemi.

In questo articolo si finisce con un confronto di DLL ad alto livello per gli assembly di Microsoft .NET Framework.

INTRODUZIONE

Per i sistemi operativi Microsoft Windows elencati nella sezione "Si applica a", gran parte delle funzionalità del sistema operativo è fornita da librerie a collegamento dinamico (DLL). Inoltre, quando si esegue un programma in uno di questi sistemi operativi Windows, gran parte delle funzionalità del programma può essere fornita dalle DLL. Ad esempio, alcuni programmi possono contenere molti moduli diversi e ogni modulo del programma è contenuta e distribuito nelle DLL.

L'utilizzo delle DLL consente di promuovere la modularità del codice, riutilizzo del codice, utilizzo efficiente della memoria e ridotto lo spazio su disco. Di conseguenza, il sistema operativo e i programmi caricata più rapidamente, più rapida l'esecuzione e richiedere meno spazio su disco nel computer.

Quando un programma utilizza una DLL, un problema che viene chiamato dipendenza può causare l'esecuzione del programma. Quando un programma utilizza una DLL, viene creata una dipendenza. Se un altro programma sovrascrive e interrompe questa dipendenza, il programma originale non può essere eseguito correttamente.

Con l'introduzione di Microsoft .NET Framework, la maggior parte dei problemi di dipendenza sono state eliminate utilizzando l'assembly.

Informazioni

Una DLL è una libreria che contiene codice e i dati che possono essere utilizzati da più di un programma nello stesso momento. Ad esempio, nei sistemi operativi Windows, la DLL Comdlg32 esegue comuni funzioni relative alla finestra di dialogo. Pertanto, ogni programma può utilizzare le funzionalità contenute in questa DLL per implementare una finestra di dialogo Apri. Ciò consente di promuovere il riutilizzo del codice e utilizzo efficiente della memoria.

Se si utilizza una DLL, un programma può essere suddiviso in moduli in componenti separati. Un programma di contabilità, ad esempio, potrebbe essere venduto dal modulo. Se è installato tale modulo, ogni modulo può essere caricato in programma principale in fase di esecuzione. Poiché i moduli sono separati, il tempo di caricamento del programma è più veloce e un modulo viene caricato solo quando viene richiesta tale funzionalità.

Inoltre, gli aggiornamenti sono più facili da applicare a ogni modulo senza alcun effetto sulle altre parti del programma. Ad esempio, potrebbe essere un programma di gestione delle retribuzioni e le aliquote di imposta modificare ogni anno. Quando queste modifiche sono isolate a una DLL, è possibile applicare un aggiornamento senza dover creare o installare nuovamente l'intero programma.

Nell'elenco seguente vengono descritti alcuni dei file vengono implementati come DLL nei sistemi operativi Windows:
  • File di controlli ActiveX (ocx)
    Un esempio di un controllo ActiveX è un controllo di calendario che consente di selezionare una data da un calendario.
  • File del Pannello di controllo (cpl)
    Un esempio di un file cpl è un elemento che si trova nel Pannello di controllo. Ogni elemento è una DLL specializzata.
  • File di driver (DRV non) di periferica
    Un esempio di un driver di periferica è un driver della stampante che controlla la stampa su una stampante.

Vantaggi DLL

Nell'elenco seguente vengono descritti alcuni dei vantaggi forniti quando un programma utilizza una DLL:
  • Utilizza un numero inferiore di risorse
    Quando più programmi utilizzano la stessa libreria di funzioni, una DLL può ridurre la duplicazione del codice che viene caricato sul disco e nella memoria fisica. Questo può influire notevolmente sulle prestazioni non solo il programma è in esecuzione in primo piano, ma anche altri programmi in esecuzione sul sistema operativo Windows.
  • Architettura modulare di Promotes
    Una DLL consente di promuovere lo sviluppo di programmi modulari. In questo modo si sviluppare programmi di grandi dimensioni che richiedono versioni in più lingue o un programma che richiede l'architettura modulare. Un esempio di un programma modulare è un programma di contabilità che dispone di molti moduli che possono essere caricati in modo dinamico in fase di esecuzione.
  • Installazione e distribuzione semplifica
    Quando una funzione all'interno di una DLL è necessario un aggiornamento o una correzione, la distribuzione e l'installazione della DLL non richiede il ricollegato con la DLL del programma. Inoltre, se più programmi utilizzano la stessa DLL, più programmi potranno tutte beneficiare dell'aggiornamento o la correzione. Questo problema può verificarsi più frequentemente quando si utilizza una DLL di terze parti aggiornata regolarmente o risolti.

Dipendenze DLL

Quando un programma o una DLL utilizza una funzione di DLL in un'altra DLL, viene creata una dipendenza. Di conseguenza, il programma non è più autonomo e il programma potrebbe verificarsi problemi se la dipendenza viene interrotta. Ad esempio, il programma non può essere eseguito se si verifica una delle seguenti operazioni:
  • Una DLL dipendente viene aggiornata a una nuova versione.
  • Una DLL dipendente è stato risolto.
  • Una DLL dipendente viene sovrascritta con una versione precedente.
  • Una DLL dipendente viene rimosso dal computer.
Queste azioni in genere sono noti come i conflitti tra DLL. Se non viene applicata la compatibilità con le versioni precedenti, il programma non può essere eseguito correttamente.

Nell'elenco seguente vengono descritte le modifiche che sono stati introdotti in Microsoft Windows 2000 e in sistemi operativi Windows successivi per ridurre al minimo i problemi di dipendenza:
  • Protezione File Windows
    In protezione File Windows, il sistema operativo impedisce che vengano aggiornati o eliminati da un agente non autorizzato DLL di sistema. Di conseguenza, quando una programma di installazione tenta di rimuovere o aggiornare una DLL che viene definita come una DLL di sistema, protezione File Windows eseguirà la ricerca di una firma digitale valida.
  • Dll private
    Consentono di DLL private isolare un programma da eventuali modifiche apportate alle DLL di private condivise dll. utilizzare informazioni specifiche della versione o un file vuoto .local per imporre la versione della DLL che viene utilizzata dal programma. Per utilizzare le DLL private, individuare le DLL nella cartella principale di programma. Per i nuovi programmi, aggiungere informazioni specifiche della versione della DLL. Per i vecchi programmi utilizzare un file .local vuota. Ogni metodo indica al sistema operativo di utilizzare le DLL private che si trovano nella cartella principale di programma.

Strumenti per la risoluzione dei problemi DLL

Sono disponibili per aiutarvi a risolvere i problemi DLL diversi strumenti. Alcuni di questi strumenti sono i seguenti strumenti.

Dipendenza Walker

Lo strumento Dependency Walker possibile analisi in modo ricorsivo per tutte le DLL dipendenti utilizzato da un programma. Quando si apre un programma in Dependency Walker, Dependency Walker esegue i seguenti controlli:
  • Verifica mancanti dll Walker dipendenza.
  • Dipendenza Walker controlla i file di programma o DLL che non sono valide.
  • Dipendenza Walker verifica che le funzioni di importare ed esportare funzioni corrispondenza.
  • Dipendenza Walker controlla gli eventuali errori di dipendenza circolare.
  • Dipendenza Walker verifica per i moduli che non sono validi perché i moduli sono per un diverso sistema operativo.
Tramite Dependency Walker è possibile documentare tutte le DLL che utilizza un programma. Ciò potrebbe essere utile per prevenire e risolvere i problemi DLL che possono verificarsi in futuro. Quando si installa Visual Studio 6.0, dipendenza Walker si trova nella seguente directory:
drive\Programmi\Microsoft visual Studio\Common\Tools

DLL Universal Problem Risolutore

Lo strumento DLL Universal problema del Risolutore (DUPS) viene utilizzato per controllare, confrontare, documento e visualizzare le informazioni di DLL. Nell'elenco seguente vengono descritte le utilità che costituiscono lo strumento DUPS:
  • Dlister.exe
    Questa utilità consente di enumerare tutte le DLL nel computer e registra le informazioni in un file di testo o a un file di database.
  • Dcomp.exe
    Questa utilità consente di confrontare le DLL elencate in due file di testo e produce un terzo file di testo contenente le differenze.
  • Dtxt2DB.exe
    Questa utilità consente di caricare i file di testo creati utilizzando l'utilità Dlister.exe e l'utilità Dcomp.exe nel database di dllHell.
  • DlgDtxt2DB.exe
    Questa utilità fornisce una versione di interfaccia utente grafica dell'utilità Dtxt2DB.exe.
Per ulteriori informazioni sullo strumento DUPS, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
247957  (http://support.microsoft.com/kb/247957/ ) Utilizzo di DUPS.exe per risolvere i problemi di compatibilità delle DLL

Guida in linea DLL database

Il database DLL Guida consente di individuare le versioni specifiche di DLL che vengono installate da prodotti software Microsoft. Per ulteriori informazioni sul database DLL Guida in linea, visitare il seguente sito Web Microsoft:
http://support.microsoft.com/dllhelp/ (http://support.microsoft.com/dllhelp/)

Sviluppo di DLL

In questa sezione vengono descritti i problemi e i requisiti da prendere in considerazione quando si sviluppa la propria DLL.

Tipi di DLL

Quando si carica una DLL in un'applicazione, due metodi di collegamento possibile chiamare le funzioni DLL esportate. I due metodi di collegamento sono di collegamento dinamico in fase di carico e di collegamento dinamico in fase di esecuzione.
Collegamento dinamico in fase di carico
In collegamento dinamico in fase di caricamento, un'applicazione effettua chiamate esplicite a funzioni DLL esportate come funzioni locali. Per utilizzare il collegamento dinamico in fase di carico, è necessario fornire un file di intestazione (h) e un file di libreria (LIB) importazione quando si compila e collegare l'applicazione. Quando si esegue questa operazione, il linker fornirà il sistema con le informazioni che sono necessarie per caricare la DLL e risolvere i percorsi di funzione DLL esportati in fase di caricamento.
Collegamento dinamico in fase di esecuzione
In collegamento dinamico in fase di esecuzione, un'applicazione chiama la funzione LoadLibrary o la funzione di LoadLibraryEx per caricare la DLL in fase di esecuzione. Dopo che la DLL viene caricata correttamente, è possibile utilizzare la funzione di GetProcAddress per ottenere l'indirizzo della funzione DLL esportata che si desidera chiamare. Quando si utilizza il collegamento dinamico in fase di esecuzione, non è necessario un file di libreria di importazione.

Nell'elenco seguente vengono descritti i criteri di applicazione per a collegamento dinamico in fase di carico utilizzare e quando utilizzare il collegamento dinamico in fase di esecuzione:
  • Prestazioni all'avvio
    Se le prestazioni di avvio iniziale dell'applicazione sono importante, è consigliabile utilizzare il collegamento dinamico in fase di esecuzione.
  • Facilità di utilizzo
    In collegamento dinamico in fase di carico, le funzioni DLL esportate sono simili a funzioni locali. Ciò semplifica il chiamare queste funzioni.
  • Logica dell'applicazione
    In collegamento dinamico in fase di esecuzione, un'applicazione può diramarsi caricare moduli diversi come richiesto. Questo è importante quando si sviluppano le versioni più lingue.

Il punto di ingresso della DLL

Quando si crea una DLL, è possibile specificare facoltativamente una funzione del punto di ingresso. La funzione del punto di ingresso viene chiamata quando i processi o thread associarsi alla DLL o se stessi scollegato dalla DLL. È possibile utilizzare la funzione del punto di ingresso per inizializzare le strutture di dati o distruggere le strutture di dati come richiesto dalla DLL. Inoltre, se l'applicazione è multithread, è possibile utilizzare l'archiviazione locale di thread (TLS) per allocare la memoria è privato per ciascun thread in funzione del punto di ingresso. Il codice riportato di seguito è riportato un esempio di funzione di punto di ingresso della 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 la funzione del punto di ingresso restituisce un valore FALSE, l'applicazione non verrà avviato se si utilizza il collegamento dinamico in fase di carico. Se si utilizza il collegamento dinamico in fase di esecuzione, non verrà caricato solo singole DLL.

La funzione del punto di ingresso deve eseguire solo le attività di inizializzazione semplice e non deve essere chiamato durante il caricamento di DLL o funzioni di terminazione. Ad esempio, in funzione del punto di ingresso, non direttamente o indirettamente chiamare la funzione LoadLibrary o la funzione di LoadLibraryEx. Inoltre, non è necessario chiamare la funzione FreeLibrary quando il processo è stato terminato.

Nota Nelle applicazioni multithreading, assicurarsi che l'accesso alla DLL dati globali sono sincronizzati (thread-safe) per evitare il danneggiamento dei dati possibili. Per effettuare questa operazione, utilizzare TLS per fornire dati univoci per ciascun thread.

L'esportazione delle funzioni DLL

Per esportare le funzioni DLL, aggiungere una parola chiave funzione per le funzioni esportate da DLL o creare un file di definizione (DEF) di modulo sono elencate le funzioni DLL esportate.

Per utilizzare una parola chiave funzione, è necessario dichiarare ciascuna funzione che si desidera esportare con la parola chiave seguente:
__declspec (dllexport)
Per utilizzare le funzioni DLL esportate nell'applicazione, è necessario dichiarare ciascuna funzione che si desidera importare con la parola chiave seguente:
__declspec (dllimport)
In genere, si utilizza un file di intestazione con un'istruzione define e un'istruzione ifdef per separare l'istruzione di esportazione e l'istruzione import.

È inoltre possibile utilizzare un file di definizione del modulo per dichiarare le funzioni DLL esportate. Quando si utilizza un file di definizione di modulo, non è necessario aggiungere la parola chiave funzione per le funzioni DLL esportate. Nel file di definizione del modulo, è necessario dichiarare l'istruzione LIBRARY e dall'istruzione EXPORTS per la DLL. Il codice riportato di seguito è riportato un esempio di un file di definizione.
// SampleDLL.def
//
LIBRARY "sampleDLL"

EXPORTS
  HelloWorld

Esempio di DLL e applicazione

In Microsoft Visual c ++ 6.0, è possibile creare una DLL selezionando il tipo di progetto Libreria di collegamento dinamico Win32 o il tipo di progetto MFC AppWizard (dll).

Il codice riportato di seguito è riportato un esempio di una DLL che è stato creato in Visual c ++ utilizzando il tipo di progetto Libreria di collegamento dinamico di 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
Il codice riportato di seguito è riportato un esempio di un progetto di Applicazione Win32 che chiama la funzione DLL esportata nella SampleDLL DLL.
// SampleApp.cpp 
//

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

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{ 	
	HelloWorld();
	return 0;
}
Nota In collegamento dinamico in fase di carico, è necessario collegare il SampleDLL.lib libreria di importazione viene creata quando si genera la SampleDLL progetto.

In collegamento dinamico in fase di esecuzione, è possibile utilizzare codice simile al seguente codice per chiamare il SampleDLL.dll esportati funzione 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 si compila e collegare l'applicazione SampleDLL, il sistema operativo Windows Cerca DLL SampleDLL nelle seguenti posizioni nell'ordine indicato:
  1. La cartella dell'applicazione
  2. La cartella corrente
  3. La cartella di sistema di Windows

    Nota La funzione GetSystemDirectory restituisce il percorso della cartella di sistema di Windows.
  4. La cartella di Windows

    Nota La funzione GetWindowsDirectory restituisce il percorso della cartella di Windows.

L'assembly di .NET Framework

Con l'introduzione di Microsoft .NET e .NET Framework, la maggior parte dei problemi sono associate le DLL sono stata eliminata utilizzando l'assembly. Un assembly è un'unità logica di funzionalità che viene eseguita sotto il controllo di .NET common language runtime (CLR). Un assembly esiste fisicamente come un file DLL o come un file exe. Tuttavia, internamente un assembly è molto diverso da una DLL Win32 Microsoft.

Un file di assembly contiene un manifesto dell'assembly, metadati di tipo, il codice Microsoft intermediate language (MSIL) e altre risorse. Il manifesto dell'assembly che contiene i metadati di assembly che fornisce tutte le informazioni necessarie per un assembly da autodescrittivi. Le informazioni riportate di seguito sono incluso nel manifesto dell'assembly:
  • Nome dell'assembly
  • Informazioni sulla versione
  • Informazioni relative alla lingua
  • Informazioni sul nome sicuro
  • Elenco degli assembly dei file
  • Informazioni sul tipo di riferimento
  • Informazioni sull'assembly a cui si fa riferimento e dipendenti
Il codice MSIL contenuto nell'assembly non può essere eseguito direttamente. Al contrario, l'esecuzione del codice MSIL viene gestito tramite CLR. Per impostazione predefinita, quando si crea un assembly, l'assembly è privato per l'applicazione. Per creare un assembly condiviso è necessario assegnare un nome sicuro all'assembly e quindi pubblicare l'assembly nella global assembly cache.

Nell'elenco seguente vengono descritte alcune delle funzionalità degli assembly confrontato con le funzioni di DLL Win32:
  • Autodescrittivi
    Quando si crea un assembly, tutte le informazioni necessarie per CLR di eseguire l'assembly sono contenute nel manifesto dell'assembly. Il manifesto dell'assembly contiene un elenco degli assembly dipendenti. Di conseguenza, il CLR può mantenere un insieme coerente di assembly utilizzati nell'applicazione. In DLL Win32, non è possibile mantenere la coerenza tra un insieme di DLL utilizzate in un'applicazione quando si utilizza la DLL condivise.
  • Controllo delle versioni
    In un manifesto assembly, informazioni sulla versione è registrate e applicati dal CLR. Inoltre, i criteri di versione possibile imporre l'utilizzo di specifiche della versione. In DLL Win32, controllo delle versioni non può essere applicata dal sistema operativo. In alternativa, è necessario assicurarsi che le DLL sono compatibili con le versioni precedenti.
  • Distribuzione di Side-by-side
    Gli assembly supportano distribuzione side-by-side. Un'applicazione può utilizzare una versione di un assembly e un'altra applicazione può utilizzare una versione diversa di un assembly. A partire da Windows 2000, è supportato distribuzione side-by-side individuando le DLL nella cartella dell'applicazione. Inoltre, protezione File Windows impedisce che le DLL venga sovrascritto o sostituito da un agente non autorizzato di sistema.
  • Isolamento e self-containment
    Un'applicazione sviluppata utilizzando un assembly può essere indipendente e isolata dalle altre applicazioni sono in esecuzione sul computer. Questa funzionalità consente di creare installazioni a impatto zero.
  • Esecuzione
    Un assembly viene eseguito con le autorizzazioni di protezione che vengono forniti nel manifesto dell'assembly e che sono controllati da CLR.
  • Indipendente dalla lingua
    È possibile sviluppare un assembly utilizzando uno qualsiasi dei linguaggi .NET supportati. Ad esempio, è possibile sviluppare un assembly in Microsoft Visual C# e quindi utilizzare l'assembly in un computer con Microsoft Visual Basic .NET progetto.

Riferimenti

Per ulteriori informazioni sulle DLL e .NET Framework gli assembly, visitare i seguenti siti Web Microsoft:
Conflitti tra DLL
http://msdn2.microsoft.com/en-us/library/ms811694.aspx (http://msdn2.microsoft.com/en-us/library/ms811694.aspx)

L'implementazione del componente side-by-side condivisione nelle applicazioni
http://msdn2.microsoft.com/en-us/library/ms811700.aspx (http://msdn2.microsoft.com/en-us/library/ms811700.aspx)

Come creare applicazioni isolate e assembly affiancati per Windows XP
http://msdn2.microsoft.com/en-us/library/ms997620.aspx (http://msdn2.microsoft.com/en-us/library/ms997620.aspx)

Semplificazione della distribuzione e sulla risoluzione dei conflitti DLL con .NET Framework
http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx (http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx)

Guida dello sviluppatore di .NET Framework: assembly
http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/hk5f40ct(vs.71).aspx)

Collegamento dinamico in fase di esecuzione
http://msdn2.microsoft.com/en-us/library/ms685090.aspx (http://msdn2.microsoft.com/en-us/library/ms685090.aspx)

Archiviazione locale di thread
http://msdn2.microsoft.com/en-us/library/ms686749.aspx (http://msdn2.microsoft.com/en-us/library/ms686749.aspx)

Le informazioni in questo articolo si applicano 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 Studio 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 Small Business Edition 2003
Chiavi: 
kbmt kbxplatform kbtshoot kbdebug kbdll kbinfo KB815065 KbMtit
Traduzione automatica articoliTraduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell’articolo: 815065  (http://support.microsoft.com/kb/815065/en-us/ )
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Condividi
Altre opzioni per il supporto
Forum del supporto di Microsoft Community
Contattaci direttamente
Ricerca di un partner certificato Microsoft
Microsoft Store