DLL: Porovnání verzí

Smazaný obsah Přidaný obsah
Bez shrnutí editace
Bez shrnutí editace
Řádek 48:
| url = http://msdn.microsoft.com/en-us/library/151kt790.aspx
| datum přístupu = 2009-07-11}}</ref> V případě, že knihovna není nalezena, nelze ji načíst nebo konkrétní funkce neexistuje, vygeneruje operační systém [[Výjimka|výjimku]], kterou může aplikace zachytit a vhodně ošetřit. Pokud aplikace výjimku nezachytí, operační systém aplikaci ukončí s hlášením o chybě.
 
==Aspekty kompilátoru a programovacího jazyka==
 
=== Delphi ===
V hlavičce zdrojového kódu se používá klíčové slovo <tt>library</tt> namísto <tt>program</tt>. Na konci souboru jsou funkce (které budou exportovány) vylistovány v klauzuli <tt>exports</tt>.
 
[[Object Pascal|Delphi]] nepotřebuje <tt>LIB</tt> soubory pro import funkcí z DLL; k nalinkování DLL je užíváno klíčové slovo <tt>external</tt> v deklaraci funkce.
 
===Microsoft Visual Basic===
[[Visual Basic]] (VB), podporuje jen run-time nalinkování; navíc ale kromě používání <tt>LoadLibrary</tt> a <tt>GetProcAddress</tt> API funkcí, jsou povoleny ''deklarace'' importovaných funkcí.
 
Při importu DLL funkcí skrze deklarace VB vyhazuje run-time error (chybu), jestliže nemohl být <tt>DLL</tt> soubor nalezen. Vývojář může zachytit chybu a náležitě ji ošetřit.
 
Při vytváření DLL ve VB, IDE dovolí vytvářet pouze ActiveX DLL, nicméně byly vytvořeny metody <ref>{{cite web
| last = Petrusha
| first = Ron
| authorlink =
| coauthors =
| title = Creating a Windows DLL with Visual Basic
| publisher = O'Reilly Media
| date = 2005-04-26
| url = http://www.windowsdevcenter.com/pub/a/windows/2005/04/26/create_dll.html?page=1
| accessdate = 2009-07-11}}</ref> pro umožnění programátorovi explicitně zahrnout <tt>.DEF</tt> soubor skrze linker. Ten obsahuje řadovou pozici a jméno každé exportované funkce. Toto umožňuje vývojáři vytvoření standardních Windows DLL (užitím Visual Basic), které mohou být referencovány skrze "deklarační" vyjádření.
 
===C and C++===
Microsoft [[Visual C++]] (MSVC) nabízí několik rozšíření oproti standardnímu [[C++]], které umožňují funkcím být specifikované jako importované nebo exportované přímo v <tt>C++</tt> kódu; toto bylo adoptováno i ostatními Windows [[C (programming language)|C]] a C++ kompilátory, zahrnujíc Windows verze [[GNU Compiler Collection|GCC]]. Tato rozšíření používají atribut <tt>__declspec</tt> před deklarací funkce. Jsou-li funkce jazyka C použity skrze jazyk C++, musí být deklarovány jako <tt>extern "C"</tt> v C++ kódu, pro informaci kompilátoru, že by mělo být použito nalinkování jazyka C. <ref>[http://msdn.microsoft.com/en-us/library/0603949d%28VS.80%29.aspx MSDN], Using extern to Specify Linkage</ref>
 
Mimo specifikování importovaných a exportovaných funkcí užitím <tt>__declspec</tt> atributů mohou být funkce vypsány v <tt>IMPORT</tt> nebo <tt>EXPORTS</tt> sekci <tt>[[.def file|DEF]]</tt> souboru použitém v projektu. <tt>DEF</tt> soubor je zpracován linkerem namísto kompilátoru.
 
DLL kompilace vyprodukuje <tt>DLL</tt> a <tt>LIB</tt> soubory. <tt>LIB</tt> soubor je použit pro link k DLL během kompilace; není nezbytný pro run-time linkování. Pokud váš DLL je [[Component Object Model]] (COM) server, musí být <tt>DLL</tt> soubor umístěn v jednom z adresářů zapsaných v systémové proměnné <tt>PATH</tt> ve výchozím systémovém adresáři nebo ve stejném adresáři jako je program. COM server DLL jsou registrovány pomocí regsvr32.exe, který umístí lokaci DLL a jeho globální unikátní ID ([[GUID]]) do registrů. Programy poté mohou použít DLL vyhledáním jeho GUID v registrech k nalezení jeho lokace (cesty).
 
== Reference ==