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

Slides:



Advertisements
Hasonló előadás
Programozás III STRING-XML.
Advertisements

Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
Bevezetés a Java programozásba
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az operációs rendszerek
Első C programunk Visual C Express-ben Horváth Ernő 1.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# tagfüggvények.
C# tagfüggvények.
A memória.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Egyszerű webes alkalmazás fejlesztése Készítette: Simon Nándor.
Egyszerű webes alkalmazás fejlesztése
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
1 Operációs rendszerek Az NT folyamatok kezelése.
Programozás alapismeretek
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Microsoft.NET Alapok.
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
ARCHITECTArchitect AcademyFoundationsInsidersMCPtréningekvizsgákgyakorlatprojektek Novák István eEvangelist – „Dive deeper” Grepton Zrt. Technológiai vezető.
Optimalizálás Ez az előadó neve beosztása vállalata.
Az AJAX technológia használata Ez az előadó neve beosztása vállalata.
Operációs rendszer.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Segédlet vizuális programozáshoz Kovács László
1.4. Fordítás, szerkesztés, az objektumkönyvtár használata.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Visual Basic 2008 Express Edition
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Podoski Péter és Zabb László. Bevezető Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket Felmértük a manapság ismert eszközök.
Webprogramozó tanfolyam
Szoftverek.
V 1.0 OE-NIK HP 1 Haladó Programozás A párhuzamos végrehajtás alapjai Folyamatok Szálkezelés alapok.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Haladó Programozás Reflexió OE-NIK HP.
Informatikai gyakorlatok 11. évfolyam
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Programok készítése és futtatása. Integrált fejlesztői környezet (IDE) tartalmaz:  szövegszerkesztőt a program forráskódjának szerkesztésére,  fordítóprogramot.
Alkalmazásfejlesztés F#-ban Dunaújvárosi Főiskola Kiss Gyula mérnökinformatikus hallgató Nemzeti Tehetség Program Tehetségútlevél Program „NTP-TÚP ”
Programozási nyelvek típusossága.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Java Code Coverage Library
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Web programozás és haladó fejlesztési technikák – C#
Thread és Task.
Web programozás és haladó fejlesztési technikák – C#
Filmes példaalkalmazás I.
Előadás másolata:

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

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

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

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 http://en.wikipedia.org/wiki/Relocation_%28computing%29 LINKELÉS FUTTATHATÓ FILE (.exe) OE-NIK HP

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

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

.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

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 http://en.wikipedia.org/wiki/DLL_Hell OE-NIK HP

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 = @"c:\Windows\Media\tada.wav"; PlaySound(fname, UIntPtr.Zero, 1); Szignatúrák, importok: www.pinvoke.net OE-NIK HP

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

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

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

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

OE-NIK HP

OE-NIK HP