1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz
2 A DLL = Dynamic Link Library WIN32: fv-eket tartalmaz, melyeket ha ismerjük a szignatúráját (paraméterezését) bármely másik programból meghívhatjuk. A WIN32 DLL-jeiből kideríthető a bennük lévő fv-ek nevei, de a paraméterezése nem! Ráadásul nem mindegy, miben írták a DLL-t (C, Delphi, …). Pl: ZIP.DLL van benne olyan fv, amelynek megadunk két string-et (becsomagolandó file neve, eredmény file neve), és elvégzi a becsomagolást (betömörítést).
3.NET Assembly készítése: File / New / Project / Class Library Az Assembly nem tartalmazhat Main() fv-t. Az assembly-ben sok class lehet. Ezek közül több segéd-osztály is lehet, amelyet nem akarjuk, hogy ‘kifelé’ látszódjon, és felhasználható legyen. Azokat az osztályokat, amelyeket kifelé láttatni szeret- nénk, meg kell jelölni (public class).
4 public class Sakktabla {... } public class Sakktabla {... } Ez jelöli, hogy a sakktábla osztály a DLL-en kívül is látszódhat, felhasználható class SakkFigura {... } public class Kiralyno:SakkFigura {... } class SakkFigura {... } public class Kiralyno:SakkFigura {... } Ellentmondás: a Kiralyno örököl a SakkFigura-tól, amely azonban nem látható kifelé. Ha egy osztály publikus, akkor az összes ősének is publikusnak kell lennie.
5 class SakkFigura {... } public class Sakktabla { public SakkFigura[,] tabla = new SakkFigura[8,8];... } class SakkFigura {... } public class Sakktabla { public SakkFigura[,] tabla = new SakkFigura[8,8];... } Ellentmondás: a SakkFigura publikus, és ezen mezője is az, ezért a SakkFigura-nak is publikusnak kellene lennie! Minden olyan típusnak publikusnak kell lennie, amelyek szükségesek a publikus mezők, metódusok meghívhatóságához, használhatóságához…
6 class SakkFigura {... } public class Sakktabla { internal static void TablaTorol() {... } } class SakkFigura {... } public class Sakktabla { internal static void TablaTorol() {... } } Új védelmi szint: INTERNAL. DLL-en belül public-ként viselkedik. DLL-en kívülről nézve private-ként (nem látszik).
7 class SakkFigura {... } public class Sakktabla { internal protected void AlapHelyzet() {... } } class SakkFigura {... } public class Sakktabla { internal protected void AlapHelyzet() {... } } Új védelmi szint: INTERNAL PROTECTED. DLL-en belül public-ként viselkedik. DLL-en kívülről nézve, ha ott származtatjuk a Sakktabla-t, a gyerekosztályban már ‘protected’, vagyis meghívható.
8.NET Assembly kipróbálása: Másik project-et kell készíteni (Console Application). Ebben SOLUTION EXPLORER / REFERENCES / ADD REFERENCE / BROWSE. Általában a DLL-beli NAMESPACE-t itt be szoktuk using-al aktiválni! A.NET Studio bemásolja a DLL-t a Bin/Debug alkönyvtárba, hogy a generált.exe-vel együtt legyen.
9.NET Assembly készítése és kipróbálása: SOLUTION: projectek összessége File / New / Blank Solution File / New / Project / Class Library File / New / Project / Console Application Ekkor egyetlen solution-ban van a DLL, és a teszt program is. Ha a DLL-t újrafordítjuk, akkor a teszt program már automatikusan ‘látja’ az új verziót.
10 SOLUTION: projectek összessége Ha egy SOLUTION-ban vannak, akkor az ADD REFERENCE is egyszerűbb: a 3. fülön (‘Projects’) eleve rajta van a DLL. Ha egy SOLUTION-ban van több project, akkor be kell állítani hogy melyik induljon el (Set as Startup Project).