Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

DLL használata és készítése Feladat

Hasonló előadás


Az előadások a következő témára: "DLL használata és készítése Feladat"— Előadás másolata:

1 DLL használata és készítése Feladat
Haladó Programozás DLL használata és készítése Feladat OE-NIK HP

2 DLL használata és készítése Feladat
Haladó Programozás DLL használata és készítése Feladat OE-NIK HP

3 Dynamic Link Library / Shared Object
Program modul, ami tartalmazhat programkódot, megosztott erőforrásokat, melyek elérhetők más modulokból Külön fordított, a programhoz ténylegesen csak a futási időben kapcsolódik ( = dynamic) A memóriába csak egyszer töltődik be, több program is használhatja (= shared, .NET alatt ez korlátozottan igaz) A mai operációs rendszerek felhasználó számára elérhető programjai/moduljai kizárólagosan így működnek (bár több nyelvben is lehetséges statikus fordítást kérni, nem illik) Windows OS alatt meg kell különböztetni a natív és a felügyelt DLL-t: Natív: OS/CPU számára értelmezhető bytekód: procedurális kód, egyszerű típusok, közvetlen HW elérés is akár Felügyelt: Egy (vagy több) .NET CLR osztály van benne „Korlátozottan igaz” = AppDomain –enként egyszer https://msdn.microsoft.com/en-us/library/vstudio/43wc4hhs%28v=vs.100%29.aspx OE-NIK HP

4 Klasszikus fordítás Object File: Egy köztes kód-reprezentáció, a fordító generálja a forráskód lefordítása után Tartalmazza: az értelmezett, fordított kódot és relokációs adatokat, utóbbit a linker használja a futtatható állomány generálásához A külső library kód static linking esetén bekerül az EXE/ELF állományba; dynamic linking esetén nem FORRÁS (.cpp, .pas, .c, .cs, .*) ELŐFELDOLGOZÁS, FORDÍTÁS KÜLSŐ LIBRARY-K (.o, .obj, .so, .dll) OBJECT FILE (.o, .obj) Relokációs adatok: az adott modulból fordított 0-s cím helye alapján a metódus entry point-ok elhelyezkedése a végső EXE file-ban LINKELÉS FUTTATHATÓ FILE (.exe) OE-NIK HP

5 Static linking Az összes használt függvény/ erőforrás a programban van
Ezek helye a fordítóprogram számára ismert Így fordításkor az ezekre történő hivatkozás előre megadható, mert az adott kód a program saját címterületén található Ugyanazt a függvényt több program is külön-külön betölti  pazarlás A Klasszikus (nem overlay) DOS programok (pl: Turbo Pascal) Program SomeFunct1 SomeFunct2 SomeFunct3 Constant1 Constant2 Constant3 Main Code . @SomeFunct3 @SomeFunct1 OE-NIK HP

6 Dynamic linking Egyes függvények/erőforrások a program saját címterületén kívül vannak Ezek helye a fordítóprogram számára nem ismert Így fordításkor az ezekre történő hivatkozás dinamikus, futási időben derül ki a pontos hely (a betöltést az OS végzi) Ugyanazt a függvényt több program is együtt használja  megosztott erőforrás (~ Shared Object) A Legtöbb modern program így működik Program 1 . @SomeFunct2 DLL SomeFunct2 SomeFunct3 Program 2 . @SomeFunct3 OE-NIK HP

7 .NET JIT JIT = Just-In-Time
Metódusonként, az OOP elvek miatt a sebességvesztés kicsi NGEN.EXE használható, de sebességet nem mindig növel Hasonló elv, de sokban más: Java Hotspot VM OE-NIK HP

8 Felügyelt vs. natív DLL-ek
Az aktuális könyvtárból vagy a %PATH%-ból töltődik be Lassú betöltődés %PATH% = a WINDOWS, SYSTEM, SYSTEM32 könyvtárak  DLL HELL Felügyelt DLL Minden függvény egy DLL hívás volt, amit eddig használtunk Egy projekt „References” része tárolja azt, hogy mely felügyelt DLL-ek érhetőek el az adott projektből, ezt kell szerkeszteni MSDN-en megtalálható, hogy melyik osztály/névtér melyik DLL-ben található A felügyelt DLL-ek közös tárban regisztráltak (GAC), ezáltal kezelhetőek a különféle verziók és függőségek Gyors betöltődés, ugyanolyan sebességű, mintha a saját kód lenne DLL HELL: verziózás hiánya, régi verzióval történő felülírás, nincs központi tár OE-NIK HP

9 DLL elérése a .NET keretrendszerben
Felügyelt DLL hívása Referencia hozzáadása: Project/Add reference Ezután a DLL-ben tárolt névtér és az abban tárolt osztályok/metódusok a szokványos módon elérhetőek Platform Invoke (P/Invoke: natív bytekód hívása felügyelt környezetből)  DllImport attribútum using System.Runtime.InteropServices; [DllImport("winmm.dll", SetLastError = true)] static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound); string fname PlaySound(fname, UIntPtr.Zero, 1); Szignatúrák, importok: OE-NIK HP

10 DLL használata és készítése Feladat
Haladó Programozás DLL használata és készítése Feladat OE-NIK HP

11 DLL készítése 1 solution, 2 projekt: DLL készítő + DLL használó programok A DLL-t készítő alkalmazás típusa: Class Library A DLL-t használó alkalmazás referenciái közé fel kell venni a DLL file-t (a Visual Studio segít: akár magát a projektet is fel tudjuk venni, mint referenciát) A DLL file alapértelmezetten mindig a készülő EXE file mellé másolódik A referencia hozzáadása után a DLL-t használó alkalmazásban a DLL névtere és osztálya(i) szokványosan elérhetőek OE-NIK HP

12 Feladat Hozzon létre egy alkalmazást, ahol a játék főprogram modulokon keresztül kezeli a játékosokat User  felhasználó irányítja RandomEnemy  véletlenszerű mozgás FollowerEnemy  követő mozgás Oldja meg a feladatot referenciaként hozzáadott, illetve dinamikusan betöltött DLL segítségével! A közös osztályok letölthetőek a weboldalról OE-NIK HP

13 Források Miklós Árpád prezentációja OE-NIK HP

14 OE-NIK HP

15 OE-NIK HP


Letölteni ppt "DLL használata és készítése Feladat"

Hasonló előadás


Google Hirdetések