Co je knihovna DLL?

Překlady článku Překlady článku
ID článku: 815065 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek popisuje, co je dynamická knihovna (DLL) a různé problémy, které mohou nastat při použití knihoven DLL.

Potom tento článek popisuje některé další problémy, které je třeba zvážit při vývoji vlastních knihoven DLL. V popisující jaké knihovny DLL, tento článek popisuje metody dynamické propojení, závislostí mezi knihovnami DLL knihovny DLL vstupní body, export funkcí knihovny DLL a knihovny DLL nástroje poradců při potížích.

Tento článek se dokončí s porovnáním vysoké úrovně knihoven DLL Microsoft.Sestavení .NET Framework.

ÚVOD

Pro operační systémy Microsoft Windows, které jsou uvedeny v části "Platí pro", mnoho funkcí operačního systému poskytuje dynamické knihovny (DLL). Navíc při spuštění program na jednom z těchto operačních systémů Windows, mnoho funkcí program může poskytovat knihoven DLL. Některé programy mohou obsahovat například je součástí mnoha různých modulů a každý modul programu a distribuovat do knihoven DLL.

Použití knihovny DLL napomáhá modularization z kód, opakovaného použití kódu, využití paměti efektivní a sníženou místa. Proto operační systém a programy načítají rychleji, rychleji a kratší místo na disku v počítači.

Pokud program používá knihovnu DLL problém, se nazývá závislost může způsobit, že program nelze spustit. Pokud program používá Knihovna DLL, je vytvořena závislost. Je-li jiný program přepíše a konce tohoto závislost, původní program nemusí úspěšně spustit.

S zavedení aplikace Microsoft.Mít většinu problémů závislost NET Framework bylo odstraněno pomocí sestavení.

Další informace

Co je knihovna DLL?

Knihovna DLL je knihovna obsahující kód a data, která mohou být využívány více programů současně. Například v operačního systému Windows systémy, Comdlg32 DLL provádí běžné dialogového okna pole související funkce. Proto každý program pomocí funkce obsažené v této knihovny DLL implementace Otevřít Dialogové okno. To pomáhá podporovat opakované použití kódu efektivní využití a paměti.

Pomocí knihovny DLL programu lze modularized do samostatné součásti. Například může být účetní program prodávaných modulu. Každý modul lze načíst do hlavní aplikace za běhu Pokud Tento modul nainstalován. Protože moduly jsou oddělené a době zatížení program je rychlejší a modul je načten pouze v případě, že je daná funkce požádal.

Aktualizace jsou navíc snazší použít pro každý modul bez ovlivnění ostatních částí programu. Může mít například program mzdy a daňových sazeb změnit každý rok. Pokud jsou tyto změny samostatný na knihovnu DLL, můžete použít aktualizaci bez nutnosti vytvářet nebo nainstalovat celý program znovu.

Následující seznam popisuje některé soubory, které jsou implementovány jako knihovny DLL v operačním systému:
  • Soubory ovládacích prvků ActiveX (OCX)
    Je například ovládací prvek ActiveX kalendáře řízení umožňuje vybrat datum z kalendáře.
  • Řízení panelů (CPL) soubory
    Je například soubor CPL položku, která se nachází v Ovládací panely. Každá položka je specializované knihovny DLL.
  • Soubory ovladačů (DRV) zařízení
    Ovladač tiskárny je například ovladač zařízení, řídí tisk na tiskárně.

Výhody knihovny DLL

Následující seznam popisuje některé výhody, které jsou Pokud program používá knihovnu DLL:
  • Využívá méně prostředků
    Při použití více programů stejné knihovny funkcí, Knihovna DLL může snížit zdvojení kód, který je načten na disku a v fyzické paměti. To může výrazně ovlivňování výkonu nejen program, který je spuštěn v popředí, ale také další programy, které jsou spuštění operačního systému Windows.
  • Modulární architektura propaguje
    Knihovna DLL napomáhá vývoji modulárních programů. To pomáhá Při vývoji rozsáhlých programů, které vyžadují více jazykových verzí nebo programu Modulární architektura, která vyžaduje. Je například modulární program účetní program, který obsahuje mnoho modulů, které lze dynamicky načíst při spuštění čas.
  • Náběhy/doběhy nasazení a instalace
    Při aktualizaci nebo opravu, je nutné funkci v rámci knihovny DLL implementace a instalace této knihovny DLL nevyžaduje program novém propojení s knihovnou DLL. Dále, je-li více programy používají stejné knihovně DLL, více programů budou všechny využívat aktualizace nebo opravy. Tento problém může často dochází při použití knihovny DLL výrobců, který je pravidelně aktualizován nebo pevná.

Závislosti mezi knihovnami DLL

Pokud program nebo knihovna DLL používá funkce knihovny DLL v jiné knihovně DLL, je vytvořena závislost. Program je proto již samostatné, a program mohou nastat problémy, pokud závislost není funkční. Například program pravděpodobně nespustí, pokud dojde k jedné z následujících akcí:
  • Závislé knihovny DLL je upgradovat na novou verzi.
  • Závislé knihovny DLL je pevná.
  • Závislé knihovny DLL je přepsán starší verze.
  • Závislé knihovny DLL je odebrána z počítače.
Tyto akce jsou obecně známé jako knihovny DLL konflikty. Je-li zpětně není zajištěna kompatibilita, program může úspěšně Spusťte.

Následující seznam popisuje změny, které byly zavedeny v systému Microsoft Windows 2000 a novějších operačních systémů Windows pro Minimalizovat závislost problémy:
  • Ochrana souborů systému Windows
    V Ochrana souborů systému Windows zabraňuje operačního systému systémové knihovny DLL aktualizovány nebo odstraněny neoprávněné agentem. Proto Pokud se instalační program pokusí odstranit nebo aktualizovat knihovnu DLL, která je definována jako systémové knihovny DLL, Ochrana souborů systému Windows bude hledat platný digitální podpis.
  • Soukromé knihovny DLL
    Soukromé knihovny DLL umožňují izolovat programu změn, které jsou provedené do sdílené soukromé knihovny DLL knihoven DLL. použít informace specifické pro verzi nebo prázdné soubor .local vynutit verzi knihovny DLL, která používá program. K používat soukromé knihovny DLL, vyhledejte vaší knihovny DLL v kořenové složce aplikace. Potom u nových programy, přidejte informace specifické pro verzi pro knihovnu DLL. Staré programy pomocí .local prázdný soubor. Každá metoda říká operační systém pro soukromé použití Knihovny DLL, které jsou umístěny v kořenové složce aplikace.

Knihovna DLL nástroje pro odstraňování potíží

K dispozici vám Poradce při potížích knihovny DLL několik nástrojů. Tyto nástroje jsou některé z těchto nástrojů.

Závislost Walker

Prohledávání závislost Walker nástroj can rekurzivně pro všechny závislé Knihovny DLL, které jsou používány v programu. Při otevření programu v závislostech Walker, Závislost Walker provede následující kontroly:
  • Závislost Walker kontroluje chybějící knihovny DLL.
  • Závislost Walker zkontroluje programové soubory DLL, které jsou není platná.
  • Zkontroluje závislost Walker funkce importu a exportu Funkce stejné.
  • Závislost Walker kontroluje cyklická závislost chyby.
  • Závislost Walker kontroluje moduly, které nejsou platné protože moduly jsou pro jiný operační systém.
Pomocí Walker závislost lze dokumentovat všechny knihovny DLL, Program používá. To může pomoci zabránit a opravit problémy knihovny DLL, které mohou nastat v v budoucnosti. Závislost Walker je umístěn v adresáři při je Nainstalujte aplikaci Microsoft Visual Studio 6.0:
jednotky\Program Files\Microsoft visual Studio\Common\Tools

Knihovna DLL univerzální problému řešitele

Nástroj Řešitel univerzální problém na knihovnu DLL (DUPS) se používá k auditování, porovnání dokumentu a zobrazit informace knihovny DLL. Následující seznam popisuje nástroje, které tvoří nástroj DUPS:
  • Dlister.exe
    Tento nástroj vytvoří výčet všech knihoven DLL v počítači a protokoly informace do textového souboru nebo do souboru databáze.
  • Dcomp.exe
    Tento nástroj porovnává knihovny DLL, které jsou uvedeny ve dvou textu soubory a vytváří třetí textový soubor obsahující rozdíly.
  • Dtxt2DB.exe
    Tento nástroj načte textové soubory, které jsou vytvořeny pomocí Nástroj Dlister.exe a nástroj Dcomp.exe do dllHell databáze.
  • DlgDtxt2DB.exe
    Tento nástroj poskytuje grafické uživatelské rozhraní (GUI) verze nástroje Dtxt2DB.exe.
Pro Další informace o nástroji DUPS klepnutím na následující číslo článku zobrazení článku znalostní báze Microsoft Knowledge Base:
247957Pomocí DUPS.exe řešení potíží s kompatibilitou knihovny DLL

Rozvoj knihovny DLL

Tato část popisuje problémy a požadavky, které zvažte při vývoji vlastních knihoven DLL.

Typy knihoven DLL

Při načítání knihovny DLL v aplikaci, dvě metody, které umožňují propojení volání funkce exportované knihovny DLL. Propojení dvou metod jsou při zatížení dynamické propojení a dynamické propojení Runtime.
Dynamické propojení při zatížení
V časově zatížení dynamické propojení aplikace umožňuje explicitní volání exportovaných funkcí knihovny DLL jako místní funkce. Použití dynamického zatížení čas propojení, poskytují záhlaví (h) souboru a importu knihovna (LIB) souboru, když jste kompilace a propojení aplikace. Pokud to uděláte, vytvořeném propojovacím poskytne Systémové informace, který je nutný k načtení knihovny DLL a vyřešit exportovaná umístění funkce knihovny DLL při zatížení.
Dynamické propojení Runtime
Spuštění dynamické propojení aplikace volá buď Funkce LoadLibrary funkce nebo LoadLibraryEx funkce pro načtení knihovny DLL v době běhu. Poté, co je knihovna DLL úspěšně načten, použijete GetProcAddress Funkce získat adresu exportované knihovny DLL funkce chcete volat. Použijete-li spuštění dynamické propojení, není nutné Importujte soubor knihovny.

Následující seznam popisuje aplikaci kritéria pro použití při zatížení dynamické propojení a použití runtime dynamické propojení:
  • Výkon při spuštění
    Pokud je výkon počátečního spuštění aplikace důležité informace, byste měli používat dynamické propojení Runtime.
  • Snadné použití
    Zatížení při dynamické propojení jsou exportované funkce knihovny DLL stejně jako místní funkce. To usnadňuje můžete volat tyto funkce.
  • Aplikační logiky
    V běhu dynamické propojení, může připojení aplikace Načtěte různé moduly podle potřeby. To je důležité při vývoji vícejazyčné verze.

Vstupní bod knihovny DLL

Při vytváření knihovny DLL, můžete volitelně určit vstupní bod funkce. Funkci vstupního bodu je volána při připojení procesů a podprocesů samotné knihovně DLL nebo odpojen samotné knihovny DLL. Můžete použít funkci vstupního bodu inicializace datové struktury nebo zničení dat. struktury podle knihovny DLL. Navíc pokud je aplikace podprocesy, můžete použít místní úložiště podprocesu (TLS) přidělení paměti, je soukromá, aby každý podproces ve funkci vstupního bodu. Následující kód je například funkce knihovny DLL vstupní bod.
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;
}
Když se vrátí funkci vstupního bodu NEPRAVDA hodnota, aplikace se nespustí používáte-li při zatížení dynamické propojení. Pokud používáte běhu dynamické propojení pouze osoba Knihovna DLL nebude načten.

Funkci vstupního bodu by měla provádět pouze jednoduché Inicializace úlohy a by měla zavolat ostatní načtení knihovny DLL nebo ukončení funkce. Například ve funkci vstupního bodu, měli byste přímo nebo nepřímo volání Funkce LoadLibrary funkce nebo LoadLibraryEx funkce. Navíc nelze volat FreeLibrary funkce v případě, že proces bude ukončen.

Poznámka: Ve víceprocesových aplikacích Ujistěte se, že tento přístup ke knihovně DLL globální data synchronizována (podproces bezpečné), aby se zabránilo poškození dat. K To proveďte pomocí TLS poskytnout jedinečná data pro každý podproces.

Export funkcí knihovny DLL

Chcete-li exportovat funkce knihovny DLL, můžete buď přidat klíčové slovo funkce funkce exportované knihovnou DLL, nebo vytvořte soubor definice (modulu.def) modul, který obsahuje seznam exportovaná funkce knihovny DLL.

Chcete-li použít klíčové funkce, musíte Prohlašuji, že každé funkce, která chcete exportovat následující klíčové slovo:
__declspec(dllexport)
Používání exportované funkce knihovny DLL v aplikaci, kterou musíte deklarovat, který chcete importovat následující klíčové funkce:
__declspec(DllImport)
Obvykle použijete jednu hlavičku souboru, který má definovat prohlášení a ifdef příkaz Oddělit příkazu export a import prohlášení.

Soubor definice modulu můžete také deklarovat funkce exportované knihovny DLL. Použijete-li soubor definice modulu, nemáte Přidat klíčové funkce exportované funkce knihovny DLL. V modulu Soubor definice deklarovat KNIHOVNA prohlášení a VÝVOZ výkaz pro knihovnu DLL. Následující kód je příkladem definiční soubor.
// SampleDLL.def
//
LIBRARY "sampleDLL"

EXPORTS
  HelloWorld

Vzorový soubor DLL a aplikace

V jazyce Microsoft Visual C++ 6.0 můžete vytvořit knihovnu DLL výběrem buď Knihovna DLL Win32 typ projektu nebo AppWizard MFC (dll) typ projektu.

Následující kód Příklad knihovnu DLL, která byla vytvořena v aplikaci Visual C++ pomocí Knihovna DLL Win32 typ projektu.
// 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
Následující kód je příkladem Win32 Aplikace Projekt, který volá funkci exportované knihovny DLL v Knihovna DLL SampleDLL.
// SampleApp.cpp 
//

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

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{ 	
	HelloWorld();
	return 0;
}
Poznámka: V zatížení čas dynamické propojení, je nutné propojit SampleDLL.lib Importujte knihovny, který je vytvořen při sestavení SampleDLL projekt.

V běhu dynamické propojení použijete kód, který je podobný Následující kód volat SampleDLL.dll exportované funkce knihovny 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);
}
...
Při kompilaci a propojení SampleDLL aplikace systému Windows operační systém vyhledává v následujících umístěních v knihovně DLL SampleDLL Toto pořadí:
  1. Složky aplikace
  2. Aktuální složka
  3. Systémové složky systému Windows

    Poznámka: Na GetSystemDirectory Funkce vrátí cestu systému Windows složka.
  4. Složka Windows

    Poznámka: Na GetWindowsDirectory Funkce vrátí cestu složky systému Windows.

Na.Sestavení .NET Framework

Zavedení aplikace Microsoft.NET a.Rozhraní .NET Framework Většina problémů, které jsou spojeny s knihovnami DLL byly odstraněny pomocí Pomocí sestavení. Sestavení je funkce, která se spouští logická jednotka pod kontrolou.NET společného jazykového modulu runtime (CLR). Sestavení fyzicky existuje jako soubor DLL nebo exe. Však interně sestavení se velmi liší od knihovny DLL Microsoft Win32.

Sestavení soubor obsahuje manifestu sestavení metadata typu Microsoft zprostředkující kód jazyka (MSIL) a další prostředky. Manifest sestavení obsahuje sestavení metadat, který poskytuje všechny informace požadované pro sestavení, aby obsahoval vlastní popis. Následující informace je zahrnuta v manifestu sestavení:
  • Název sestavení
  • Informace o verzi
  • Informace o kultuře
  • Silný název informace
  • Sestavení seznamu souborů
  • Informace o typu odkazu
  • Informace o odkazované a závislá sestavení
MSIL kód, který je obsažen v sestavení nelze. spustit přímo. Místo toho kódu MSIL je spravován prostřednictvím CLR. Podle výchozí nastavení při vytváření sestavení, sestavení je soukromá, aby aplikace. Vytvořit sdílené sestavení vyžaduje, abyste přiřadili silný název k sestavení a publikovat v globálním sestavení sestavení mezipaměť.

Následující seznam popisuje některé funkce sestavení srovnání funkcí knihoven DLL Win32:
  • Self-describing
    Při vytváření sestavení, všechny informace, je požadováno pro modul CLR spuštění sestavení je obsažen v manifestu sestavení. Manifest sestavení obsahuje seznam závislá sestavení. Proto CLR můžete zachovat konzistentní sada sestavení, která jsou používána aplikace. V systému Win32 dll nelze zachovat soulad mezi sady Knihovny DLL, které jsou použity v aplikaci při použití sdílených knihoven DLL.
  • Správa verzí
    V manifestu sestavení, zaznamenává se informace o verzi a vynuceno CLR. Navíc verze zásady umožňují vynutit specifické využití. V systému Win32 dll, správu verzí nelze vynutit operační systém. Místo toho musíte přesvědčit, že jsou zpětně knihovny DLL kompatibilní.
  • Nasazení vedle sebe
    Sestavení podporovat zavádění vedle sebe. Jedna aplikace můžete použít jednu verzi sestavení a jiné aplikace můžete použít jinou verze sestavení. Spuštění v systému Windows 2000, je vedle sebe nasazení podporuje vyhledání knihovny DLL ve složce aplikace. Kromě toho systém Windows Ochrana souboru brání systémové knihovny dll přepsán nebo nahrazuje neoprávněné agent.
  • Self-containment a izolace
    Aplikace vytvořené pomocí sestavení může být samostatné a z jiných aplikací, které jsou spuštěny v izolovaném počítač. Tato funkce pomáhá vytvořit zařízení dopad na nulu.
  • Spuštění
    Sestavení je spouštěna oprávnění zabezpečení, které jsou dodávané v sestavení manifest a které jsou ovládány CLR.
  • Závislý na jazyce
    Sestavení mohou být vytvořeny pomocí některé z podporováno.NET jazyků. Můžete například vyvinout sestavení v aplikaci Microsoft Visual C# a poté sestavení v aplikaci Microsoft Visual Basic.NET projekt.

Odkazy

Další informace o knihovnách DLL a.NET Framework sestavení, naleznete na následujících webech společnosti Microsoft:
Knihovna DLL konflikty
http://msdn2.microsoft.com/en-us/library/ms811694.aspx

Součást prováděcích vedle sebe, sdílení aplikací
http://msdn2.microsoft.com/en-us/library/ms811700.aspx

Jak sestavit a služby samostatný aplikací a -souběžně sdílená sestavení pro systém Windows XP
http://msdn2.microsoft.com/en-us/library/ms997620.aspx

Zjednodušení implementace a knihovny DLL řešení konfliktu.NET Framework
http://msdn2.microsoft.com/en-us/netframework/aa497268.aspx

Na.NET Framework developer's guide: sestavení
http://msdn2.microsoft.com/en-us/library/hk5f40ct (vs.71) .aspx

Dynamické propojení Runtime
http://msdn2.microsoft.com/en-us/library/ms685090.aspx

Místní úložiště podprocesu
http://msdn2.microsoft.com/en-us/library/ms686749.aspx

Vlastnosti

ID článku: 815065 - Poslední aktualizace: 20. května 2011 - Revize: 7.0
Informace v tomto článku jsou určeny pro produkt:
  • 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 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 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
Klíčová slova: 
kbxplatform kbtshoot kbdebug kbdll kbinfo kbmt KB815065 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:815065

Dejte nám zpětnou vazbu

 

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