piątek, 31 stycznia 2014

DLL - Dynamic Link Library

Czasami bywa tak, że pisząc jakiś kod myślimy, że jego elementy przydadzą nam się w przyszłości, że jego zastosowanie będzie możliwe nie tylko w aktualnym projekcie, ale np. za miesiąc. Oczywiście można go zapisać na dysku, albo... stworzyć bibliotekę!

Czym jest biblioteka? Biblioteka to plik (skompilowany w formacie .dll) zawierający funkcje z których możemy później korzystać. Cechy takiej biblioteki

  1. Możemy zamienić ją w pojedynczy plik dll, do którego kodu nikt nie będzie miał wglądu
  2. Zagnieżdżanie skompilowanej biblioteki jest dużo bardziej poręczne
  3. Biblioteka przenosi nie tylko kod, ale także, np. grafikę (z czego głownie powstaje dla kodu, grafikę powinien zawierać plik .exe, nt.plik dll powinien ważyć jak najmniej)
  4. Co ciekawe - dzięki plikom dll można użyć funkcji C# w Javie, funkcji z C w C#, etc. Nie jestem pewien limitów tych możliwości, jednak jest to dość istotna możliwość. Na pewno występują problemy z wersjami (używanie DLLek z .NET 4.5 w 4.0 odpada, jednak działa to w przeciwną stronę)
Żeby stworzyć bibliotekę DLL:
1. Tworzymy nowy projekt, typ: Class library, nazywamy go przykładowo SimpleDll
2. Piszemy własny kod, niech to będzie np. funkcja do pisania czegoś na konsoli
3. Wciskamy "Start", w folderze projektu (u mnie):
\Documents\Visual Studio 2013\Projects\SimpleDLL\SimpleDLL\bin\Debug
Utworzył się plik SimpleDll.dll
4. Otwieramy / tworzymy nowy projekt konsolowy do testu
5. Klikamy Project -> Add Reference
6. Wybieramy z zakładki Browse naszą bibliotekę (wyszukamy ją ręcznie na dysku)
7. Teraz, gdy trafiła do drzewka po prawo (gałąź references) możemy używać jej kodu, np.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DllTest
{
    class Program
    {
        static void Main(string[] args)
        {
            SimpleDLL.DLLClass normalClass = new SimpleDLL.DLLClass();

            normalClass.WriteSth();

            SimpleDLL.DLLStaticClass.WriteSthAnother();

            Console.ReadKey();
        }
    }
}
Wynik na konsoli:
sth                   
snother sth      
To wszystko