DLL og Reflection

DLL filer er meget smart og passer super til de Objekt-Orinterede tankegang, fordi vi her kan genbruge ikke bare objekter men hele systemer.

 

Med en DLL kan du pakke en klasse (eller flere) med flere metoder og så kan et andet projekt bruge disse “direktet” uden at se selve koden. De ser bare en pakke/dll og bruger den.

1.      Vigtigt at du husker at dette projekt skal være et Class Library. For at gøre det nemmere skal du bruge samme navn som jeg “MinFørsteDLL”.

1.      Skriv samme kode som jeg, og brug identisk det samme navn som jeg.

1.      Vælg så at Build´e projektet.


1. Så gemmer du projektet.

1.      Nu laver du et helt ny projekt som skal være en Console Application.

1.      Nu kommer den lidt mærkelige afdeling, vi skal nemlig “pege” på vores DLL fil, for at kunne bruge den. Du skal derfor “Add Reference”...

1.      Så skal du finde DLL filen, som helst ligger i en mappe i dit første projekt.

 

1.      Her kan du se at  DLL filen er med under References, og det er godt.

1.      Men vi må også referere til den i vores Program klasse og det gør du ved at skirve “using MinFørsteDLL;

1.      Så er vi endelig klar til at bruge selve DLL´en. Skriv denne kode og kør så projektet.

1.      Du burde nu få dette resultat.


 

REFLECTION

Som noget ret centralt i udvikling af systemer, er at man kan ændre systemet mens det kører (run-time). Man er fri for at kompilere koden for at lave ændringer på systemet. Fidusen er at du laver en DLL fil som dit system bruger, men så finder du ud af at der skal ændres i DLL filens funktionalitet. Så kompilerer du bare en ny DLL fil som har identisk det samme navn og har samme indmad, og overskriver den gamle, alt i mens dit system kører.

Her kommer min løsning på samme DLL jeg har lavet ovenover

Sådan gør du: Du laver en Form projekt, og kopierer følgende kode til en knap og du skal også have e TextBox. Nu starter du dit Form Projekt, og det skal bare køre hele tiden.

 

Så laver du din DLL (som ovenover) og lægger den i Roden (”C:\”), så trykker du på knappen, og så skulle resultatet gerne være 6 i textboxen.

 

Men nu skal du gå ind i dit DLL projekt igen og ÆNDRE i metoden plus, f.eks lave den om til [a + b + 20] og så kompilerer du og tager så den nye DLL fil og flytter den på C og overskriver den gamle. Hvis du nu trykker på Knappen igen, så burde resultatet blive 26.

 

        private void button1_Click(object sender, EventArgs e)

        {

                //----Runtime---------------------------------------

                Assembly testAssembly = Assembly.Load(System.IO.File.ReadAllBytes(@"C:\MinFørsteDLL.dll"));

                Type calcType = testAssembly.GetType("MinFørsteDLL.MinDLLKlasse");

                object calcInstance = Activator.CreateInstance(calcType);

 

                // invoke public instance method: public int plus(int a, int b)

                int value = (int)calcType.InvokeMember("plus",

                BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public,

                null, calcInstance, new object[] { 5, 1 });

                textBox1.Text = value.ToString();

        }