Biblioteki rozszerzeń aplikacji desktopowych
Biblioteki rozszerzeń (plik *.dll) to pliki zawierające implementacje kodów dowolnych podprogramów lub zasobów programu, które mogą być wykorzystywane przez dowolne pliki wykonywalne (niekończenie z sobą powiązanych). Biblioteka DLL musi zostać połączona podczas kompilacji aplikacji, która tę bibliotekę będzie wykorzystywać.
Korzystanie z bibliotek DLL ułatwia rozszerzanie, modyfikowanie funkcjonalności aplikacji bez konieczności ponownej instalacji programu, wystarczy tylko uaktualnić pliki *.dll.
Indeksy tekstowe
W celach ćwiczeniowych tworzenia i dołączania bibliotek DLL do aplikacji desktopowej utworzymy bibliotekę rozszerzającą funkcjonalność pisania łańcuchów znaków typu String o możliwość używania indeksu górnego i dolnego. Tworzona biblioteka będzie zawierać klasę z funkcją piszącą indeks górny lub dolny przy podanym znaku na przykład x12, 52, H2 itp. Gotowa biblioteka pozwoli rozszerzyć funkcjonalność każdego przyszłego projektu o te funkcje
Inicjowanie biblioteki klas
Aby rozpocząć tworzenie biblioteki musimy zainicjować projekt tworzenia bibliotek rozszerzeń. W oknie dialogowym tworzenia nowego projektu wybierz jak poniżej
Następnie w oknie dialogowym Konfiguruj nowy projekt podaj nazwę tworzonej biblioteki, która stanie się również nazwą przestrzeni nazw (patrz po słowie kluczowym namespace)
Nazwę klasy w tworzonej bibliotece można zawsze zmienić po przejściu do funkcji okna Eksploratora rozszerzeń- patrz poniżej
Wprowadzanie kodu
Wprowadzanie kodu odbywa się na tych samych zasadach jak każdego innego rozwiązania. Różnica jest w sposobie kompilacji. Nie mamy również możliwości bezpośredniego sprawdzenia działania kodu pisanego rozwiązania.
W omawianym pomyśle pisania indeksów cyfrowych górnych i dolnych jest wykorzystanie wybranych znaków ze zbioru znaków UNICOD. Wybrane znaki przechowywane są w łańcuchu typu string. Dostęp do wybranego znaku odbywa się przez wykorzystanie stylu lambda przy wyborze znaku z ciągu znaków (instrukcja ToString().Select().ToArray()). Więcej o stylu lambda znajdziesz pod linkiem:
Przejdź do artykułuProponowany kod rozwiązania pisania indeksów
Wskazówka:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IndeksyTekstowe
{
public static class Indeks
{
public static string Gorny(this int liczba)
{
if (liczba == 0 ||
liczba == 1)
return "";
//zbiór znaków indeksów górnych
const string Cyfry =
"\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079";
string wynik = "";
if (liczba < 0)
{
//ewentualny znak minus dopisz przed ciąg znaków
//na przykład potęga ujemna x^-2
wynik = ((char)0x207B).ToString();
liczba *= -1;
}
wynik +=
new string(liczba.ToString().Select(x => Cyfry[x - '0']).ToArray());
return wynik;
}
public static string Dolny(this int liczba)
{
if (liczba == 0 ||
liczba == 1)
return "";
//zbiór znaków indeksów dolnych
const string Cyfry =
"\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089";
string wynik = "";
if (liczba < 0)
{
//ewentualny znak minus dopisz przed ciąg znaków
//na przykład potęga ujemna x^-2
wynik = ((char)0x208B).ToString();
liczba *= -1;
}
wynik +=
new string(liczba.ToString().Select(x => Cyfry[x - '0']).ToArray());
return wynik;
}
}
}
Kompilowanie rozwiązania
Gotowy kod tworzonej biblioteki musi zostać skompilowany. Kompilacja sprawdza czy nie ma błędów składniowych i tworzy gotowy plik *.dll
Dodawanie biblioteki do projektu
Aby dodać gotową bibliotekę do dowolnego projektu należy otworzyć istniejący projekt aplikacji konsolowej lub utworzyć nowy. Poniżej wersja z tworzeniem nowego projektu
Utwórz nowy projekt aplikacji desktopowej
Dodaj odwołanie do biblioteki
W oknie dialogowym przejdź do lokalizacji pliku *.dll
Po wyborze pliku *.dll wybierz opcję Dodaj
Zatwierdź wybór w Menadżerze odwołań
Jeżeli wszystko prawidłowo zrobimy to w Eksploratorze rozwiązań zobaczymy dodaną bibliotekę, a w kodzie programu po słowie kluczowym using będziemy mogli tę bibliotekę zaimportować. Patrz poniższa ilustracja
Układ kontrolek
Przygotowujemy formatkę tworzonej aplikacji konsolowej wykorzystującej napisaną wcześniej bibliotekę. Użyte kontrolki to:
- TextBox- 2 sztuki
- Button- 2 sztuki
- Label- 1 sztuka
Proponowany układ ułożenia przedstawiony jest poniżej
Wywołanie indeksu górnego lub dolnego obsługuje zdarzenie Click kontrolek Button. Cały kod programu zapisany jest poniżej
Wskazówka:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using IndeksyTekstowe;
namespace IndeksGornyDolny
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int indeks=Convert.ToInt32(textBox2.Text);
label1.Text = textBox1.Text + indeks.Gorny().ToString();
}
private void button2_Click(object sender, EventArgs e)
{
int indeks = Convert.ToInt32(textBox2.Text);
label1.Text = textBox1.Text + indeks.Dolny().ToString();
}
}
}
Jak widać jest prosty, ponieważ wykonywany jest w kodzie biblioteki DLL
Działający program
Utworzona aplikacja wykorzystująca bibliotekę rozszerzeń wymaga rozprowadzania pliku wykonywalnego *.exe wraz z plikiem biblioteki *.dll. Poniżej oba pliki zapisane w jednym folderze wybranego dysku