Delphi 2005. Kompendium programisty
-
Upload
wydawnictwo-helion -
Category
Technology
-
view
1.102 -
download
5
description
Transcript of Delphi 2005. Kompendium programisty
Wydawnictwo Helionul. Chopina 644-100 Gliwicetel. (32)230-98-63e-mail: [email protected]
PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£
IDZ DOIDZ DO
ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG
KATALOG KSI¥¯EKKATALOG KSI¥¯EK
TWÓJ KOSZYKTWÓJ KOSZYK
CENNIK I INFORMACJECENNIK I INFORMACJE
ZAMÓW INFORMACJEO NOWO�CIACH
ZAMÓW INFORMACJEO NOWO�CIACH
ZAMÓW CENNIKZAMÓW CENNIK
CZYTELNIACZYTELNIA
FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE
SPIS TRE�CISPIS TRE�CI
DODAJ DO KOSZYKADODAJ DO KOSZYKA
KATALOG ONLINEKATALOG ONLINE
Delphi 2005.Kompendium programistyAutor: Adam BoduchISBN: 83-7361-780-9Format: B5, stron: 1048
Nowa wersja �rodowiska programistycznego Delphi to kolejne nowo�ci — pe³na integracja zarówno z platform¹ .NET, jak i Win32, nowe technologie tworzenia aplikacji, nowe komponenty i mo¿liwo�æ stosowania nie tylko jêzyka Delphi, ale równie¿ C#.Za pomoc¹ najnowszej wersji Delphi mo¿na tworzyæ nie tylko „standardowe” aplikacje, ale równie¿ wykorzystywaæ mo¿liwo�ci oferowane przez .NET. Tworzenie aplikacji klient-serwer, us³ug sieciowych, intranetów i dynamicznych witryn WWW w oparciuo tê platformê sta³o siê szybsze i ³atwiejsze. Wiêksze mo¿liwo�ci poci¹gnê³y za sob¹ równie¿ sporo zmian w samym �rodowisku i sposobie korzystania z niego.
Ksi¹¿ka „Delphi 2005. Kompendium programisty” przedstawia najnowsz¹ wersjê tego popularnego narzêdzia. Jej pierwsza czê�æ opisuje zagadnienia podstawowe — interfejs u¿ytkownika i zasady programowania, najwa¿niejsze elementy platformy .NEToraz podstawy wizualnego tworzenia aplikacji. Kolejne czê�ci zawieraj¹ bardziej zaawansowane tematy — wykrywanie b³êdów w programach, tworzenie aplikacjidla platformy .NET, komunikacja z bazami danych oraz programowanie sieciowe. Czytaj¹c ksi¹¿kê, dowiesz siê, jak tworzyæ aplikacje i us³ugi sieciowe, jak korzystaæz technologii XML i IntraWeb oraz jak tworzyæ wydajne aplikacje klient-serwer.
• Interfejs u¿ytkownika Delphi 2005• Jêzyk programowania Delphi• Podstawowe elementy .NET• Wizualne tworzenie aplikacji i stosowanie komponentów• �rodowisko .NET Framework• Zasady programowania obiektowego• Wykrywanie b³êdów w aplikacjach• Aplikacje bazodanowe• Technologia ADO.NET i BDE.NET• Wykorzystanie jêzyka XML• Tworzenie dynamicznych witryn WWW w jêzyku ASP.NET• Us³ugi sieciowe• Podstawy jêzyka C#
Je�li planujesz wykorzystanie Delphi 2005 do budowania aplikacji dla platformy .NET,
ta ksi¹¿ka bêdzie dla Ciebie niezast¹pionym �ród³em informacji
Spis treści
Tematyka książki .......................................................................................................................................25
Część I .........................................................................................................................................27
Rozdział 1. Wstęp do programowania ........................................................................................................................29Historia informatyki ....................................................................................................... 29Czym jest programowanie? ............................................................................................ 30Języki programowania .................................................................................................... 31
Asembler .................................................................................................................. 33Fortran ...................................................................................................................... 33C .............................................................................................................................. 34C++ .......................................................................................................................... 34Perl ........................................................................................................................... 34PHP .......................................................................................................................... 35Turbo Pascal ............................................................................................................. 35Java .......................................................................................................................... 35C# ............................................................................................................................ 36
Kilka słów o kompilatorach ............................................................................................ 36Działanie kompilatorów ........................................................................................... 37Który kompilator wybrać? ....................................................................................... 38
Dzień programisty .......................................................................................................... 39Delphi ............................................................................................................................. 39
Object Pascal ............................................................................................................ 40Delphi — czy warto? ............................................................................................... 40
Co będzie potrzebne w trakcie nauki? ............................................................................ 41Instalacja Delphi ............................................................................................................. 41
Wersje Delphi .......................................................................................................... 42Cennik ...................................................................................................................... 42Wymagania Delphi .................................................................................................. 43Instalacja .................................................................................................................. 43
Jak się uczyć? ................................................................................................................. 44
6 Delphi 2005. Kompendium programisty
Podstawowe okna Delphi ............................................................................................... 45Welcome Page .......................................................................................................... 46Okno główne ............................................................................................................ 47Projektant formularzy ............................................................................................... 48Paleta narzędzi ......................................................................................................... 48Inspektor obiektów ................................................................................................... 49Menedżer projektu ................................................................................................... 51Edytor kodu .............................................................................................................. 52Ukrywanie okna ....................................................................................................... 54
Pierwszy projekt ............................................................................................................. 54Tworzenie projektu .................................................................................................. 54Zapisywanie projektu ............................................................................................... 55Uruchamianie programu ........................................................................................... 55Zamykanie programu ............................................................................................... 56Otwieranie projektu .................................................................................................. 56
Kompilacja projektu ....................................................................................................... 57Pliki projektu .................................................................................................................. 57Przydatne odnośniki ....................................................................................................... 58Test ................................................................................................................................. 59FAQ ................................................................................................................................ 60Podsumowanie ............................................................................................................... 62
Rozdział 2. Wprowadzenie do .NET ..........................................................................................................................63Interfejs programistyczny ............................................................................................... 64
API systemu Windows ............................................................................................. 64Wizja .NET ..................................................................................................................... 65
Składniki platformy .NET ........................................................................................ 66Konkluzja ................................................................................................................. 69
Delphi a .NET ................................................................................................................ 69Rodzaje aplikacji ............................................................................................................ 70
Aplikacje konsolowe ................................................................................................ 70Windows Forms ....................................................................................................... 70VCL ......................................................................................................................... 70VCL.NET ................................................................................................................. 71Windows Forms vs VCL.NET ................................................................................. 72Formularze Web Forms ............................................................................................ 73
Składniki .NET Framework ............................................................................................ 74Usługi sieciowe .............................................................................................................. 74
Niezależność ............................................................................................................ 75Uniwersalność .......................................................................................................... 75
Test ................................................................................................................................. 76FAQ ................................................................................................................................ 77Podsumowanie ............................................................................................................... 78
Rozdział 3. Język Delphi ................................................................................................................................................79Aplikacje konsolowe ...................................................................................................... 80
Zapisywanie projektu ............................................................................................... 80Po kompilacji… ....................................................................................................... 81
Najprostszy program ...................................................................................................... 81Podstawowa składnia ..................................................................................................... 82
Czytanie kodu .......................................................................................................... 82Wielkość liter ........................................................................................................... 82
Spis treści 7
Pamiętaj o średniku! ................................................................................................. 83Bloki begin i end ...................................................................................................... 83Dyrektywa program ................................................................................................. 84
Komentarze .................................................................................................................... 84Umiejętne komentowanie ......................................................................................... 86
Wypisywanie tekstu ....................................................................................................... 86Położenie instrukcji .................................................................................................. 88Instrukcja Writeln .................................................................................................... 88
Zmienne .......................................................................................................................... 89Deklaracja zmiennych .............................................................................................. 89Typy danych ............................................................................................................. 90Deklaracja kilku zmiennych ..................................................................................... 91Przydział danych ...................................................................................................... 92Deklaracja zakresu danych ....................................................................................... 94Restrykcje w nazewnictwie ...................................................................................... 94
Stałe ................................................................................................................................ 95Domyślne typy stałych ............................................................................................. 95
Używanie zmiennych w programie ................................................................................ 97Łączenie danych ....................................................................................................... 97
Tablice danych ............................................................................................................... 99Tablice jako stałe .................................................................................................... 100Tablice wielowymiarowe ....................................................................................... 101Tablice dynamiczne ............................................................................................... 102Polecenia Low i High ............................................................................................. 103
Operatory ...................................................................................................................... 104Operatory przypisania ............................................................................................ 104Operatory porównania ............................................................................................ 105Operatory logiczne ................................................................................................. 105Operatory arytmetyczne ......................................................................................... 106Operatory bitowe .................................................................................................... 108Pozostałe operatory ................................................................................................ 109
Instrukcje warunkowe .................................................................................................. 109Instrukcja if..then ................................................................................................... 109Instrukcja case..of ................................................................................................... 112Instrukcja else ........................................................................................................ 115
Programowanie proceduralne ....................................................................................... 118Procedury i funkcje ...................................................................................................... 118
Procedury ............................................................................................................... 118Funkcje ................................................................................................................... 121Zmienne lokalne ..................................................................................................... 122Parametry procedur i funkcji .................................................................................. 123Parametry domyślne ............................................................................................... 125Przeciążanie funkcji i procedur .............................................................................. 126Przekazywanie parametrów do procedur i funkcji ................................................. 127Procedury zagnieżdżone ......................................................................................... 129Wplatanie funkcji i procedur .................................................................................. 129
Własne typy danych ..................................................................................................... 130Tablice jako nowy typ ............................................................................................ 130
Aliasy typów ................................................................................................................ 131Rekordy ........................................................................................................................ 132
Przekazywanie rekordów jako parametrów procedury ........................................... 132Deklarowanie rekordu jako zmiennej ..................................................................... 133Instrukcja packed ................................................................................................... 134
8 Delphi 2005. Kompendium programisty
Deklarowanie tablic rekordowych .......................................................................... 134Deklarowanie dynamicznych tablic rekordowych .................................................. 135
Instrukcja wiążąca with ................................................................................................ 135Programowanie strukturalne ......................................................................................... 136Moduły ......................................................................................................................... 136
Tworzenie nowego modułu .................................................................................... 137Budowa modułu ..................................................................................................... 137Włączanie modułu .................................................................................................. 139Funkcje wbudowane ............................................................................................... 139Sekcje Initialization oraz Finalization .................................................................... 139Dyrektywa forward ................................................................................................ 140
Konwersja typów .......................................................................................................... 142Rzutowanie ................................................................................................................... 144
Parametry nieokreślone .......................................................................................... 144Pętle .............................................................................................................................. 145
Pętla for..do ............................................................................................................ 145Pętla while..do ........................................................................................................ 148Pętla repeat..until .................................................................................................... 149Pętla for-in ............................................................................................................. 149Polecenie Continue ................................................................................................ 151Polecenie Break ...................................................................................................... 152
Zbiory ........................................................................................................................... 153Przypisywanie elementów zbioru ........................................................................... 154Odczytywanie elementów ze zbioru ....................................................................... 154Dodawanie i odejmowanie elementów zbioru ........................................................ 156
Typy wariantowe .......................................................................................................... 156VarType, VarTypeAsText ...................................................................................... 157VarToStr ................................................................................................................ 157VarIs* ..................................................................................................................... 158
Pliki dołączane ............................................................................................................. 158Etykiety ........................................................................................................................ 159Dyrektywy ostrzegawcze .............................................................................................. 160Wstęp do algorytmiki ................................................................................................... 161
Schematy blokowe ................................................................................................. 161Przykład — obliczanie silni ................................................................................... 163
Efektywny kod ............................................................................................................. 166Instrukcje warunkowe ............................................................................................ 166Typ Boolean w tablicach ........................................................................................ 167Zbiory ..................................................................................................................... 169Łączenie znaków w ciągach ................................................................................... 169
Test ............................................................................................................................... 170FAQ .............................................................................................................................. 171Podsumowanie ............................................................................................................. 173
Rozdział 4. IDE Delphi ..................................................................................................................................................175Podstawowe paski narzędzi .......................................................................................... 175
Pasek Standard ....................................................................................................... 176Pasek View ............................................................................................................. 176Pasek Debug ........................................................................................................... 177Pasek Desktop ........................................................................................................ 177Pasek Custom ......................................................................................................... 178Pozostałe paski narzędzi ........................................................................................ 178
Spis treści 9
Repozytorium obiektów ............................................................................................... 178Dodawanie projektu do repozytorium .................................................................... 179Ustawienia repozytorium ....................................................................................... 180
Praca z paletą narzędzi ................................................................................................. 181Umieszczanie komponentów na formularzu .......................................................... 182Umieszczanie kilku komponentów naraz ............................................................... 182Przycisk Categories ................................................................................................ 183Szukanie obiektu .................................................................................................... 183Przemieszczanie ikon ............................................................................................. 183Menu palety narzędzi ............................................................................................. 183
Praca z komponentami ................................................................................................. 185.NET ....................................................................................................................... 187Komponent ............................................................................................................. 187Sterowanie komponentem ...................................................................................... 188
Praca z inspektorem obiektów ...................................................................................... 188Edycja właściwości ................................................................................................ 189Zdarzenia ................................................................................................................ 191Menu inspektora obiektów ..................................................................................... 191Opcje inspektora obiektów ..................................................................................... 191
Projektant formularzy ................................................................................................... 192Siatka pomocnicza ................................................................................................. 192Usuwanie, kopiowanie i wklejanie ......................................................................... 194Zaznaczanie wielu komponentów .......................................................................... 194Menu projektanta formularzy ................................................................................. 195Pasek narzędziowy Align ....................................................................................... 196Pasek narzędziowy Spacing ................................................................................... 197Pasek narzędziowy Position ................................................................................... 198Opcje projektanta formularzy ................................................................................. 198
Projekty ........................................................................................................................ 199Opcje projektu ........................................................................................................ 200
Edytor WYSIWYG ...................................................................................................... 205Projektant strony WWW ........................................................................................ 206Inspektor obiektów ................................................................................................. 207Dodatkowe paski narzędzi ..................................................................................... 207Edycja pozostałych plików ..................................................................................... 208Opcje HTML w Delphi .......................................................................................... 209
Projektowanie interfejsu ............................................................................................... 210Paski narzędziowe .................................................................................................. 210Ikony dla paska narzędzi ........................................................................................ 211Menu główne ......................................................................................................... 213Menu podręczne ..................................................................................................... 214Pozostałe elementy interfejsu ................................................................................. 215
Kilka wersji językowych programu .............................................................................. 218Tworzenie angielskiej wersji językowej ................................................................. 219Tłumaczenie projektu ............................................................................................. 220Kompilacja projektu ............................................................................................... 221Opcje Translation Manager .................................................................................... 222
Opcje środowiska ......................................................................................................... 223Test ............................................................................................................................... 224FAQ .............................................................................................................................. 224Podsumowanie ............................................................................................................. 226
10 Delphi 2005. Kompendium programisty
Rozdział 5. Przegląd .NET Framework .................................................................................................................. 227Środowisko CLR .......................................................................................................... 227
Kod pośredni IL ..................................................................................................... 228Kod zarządzany i niezarządzany ............................................................................ 229Moduł zarządzany .................................................................................................. 229Podzespoły ............................................................................................................. 230Działanie CLR ........................................................................................................ 230
System CTS .................................................................................................................. 231Specyfikacja CLS ......................................................................................................... 232Biblioteka klas .............................................................................................................. 233Moduły i przestrzenie nazw .......................................................................................... 233
Wieloznaczność ..................................................................................................... 234Główne przestrzenie nazw ..................................................................................... 235Tworzenie przestrzeni nazw ................................................................................... 237
Test ............................................................................................................................... 237FAQ .............................................................................................................................. 238Podsumowanie ............................................................................................................. 238
Rozdział 6. Praca z kodem źródłowym ................................................................................................................... 239Na czym polega programowanie obiektowe? ............................................................... 239Biblioteki wizualne ....................................................................................................... 240Podstawowy kod formularza ........................................................................................ 241Formularz w VCL.NET ................................................................................................ 243
Sekcja uses ............................................................................................................. 243Klasa ...................................................................................................................... 244Zmienna wskazująca na klasę ................................................................................ 244Plik *.nfm ............................................................................................................... 244Generowanie kodu ................................................................................................. 245Nazwy komponentów ............................................................................................. 245
Programowanie zdarzeniowe ........................................................................................ 246Generowanie zdarzeń ............................................................................................. 246Lista zdarzeń w inspektorze obiektów ................................................................... 249Jedno zdarzenie dla kilku obiektów ....................................................................... 250
Edytor kodu .................................................................................................................. 251Ukrywanie kodu ..................................................................................................... 252Makra ..................................................................................................................... 252Code Insight ........................................................................................................... 252Code Completion ................................................................................................... 253Help Insight ............................................................................................................ 254Wyróżnianie błędów .............................................................................................. 254Menu podręczne edytora kodu ............................................................................... 255Opcje edytora kodu ................................................................................................ 256Skrawki kodu ......................................................................................................... 262
To-Do List .................................................................................................................... 263Generowanie komentarza TODO ........................................................................... 263Menu podręczne okna ............................................................................................ 264
Szablony kodu .............................................................................................................. 265Refaktoryzacja .............................................................................................................. 266
Deklaracja zmiennych ............................................................................................ 266Deklaracja pól ........................................................................................................ 267Wyodrębnianie metod ............................................................................................ 267Wyodrębnianie łańcucha zasobów ......................................................................... 267
Spis treści 11
Zmiana nazwy ........................................................................................................ 268Szukanie modułu .................................................................................................... 269
Synchroniczna edycja ................................................................................................... 269Wyszukiwanie odwołań ............................................................................................... 270Menedżer projektu ........................................................................................................ 271
Model View ........................................................................................................... 272Data Explorer ......................................................................................................... 272
Menedżer historii .......................................................................................................... 272Test ............................................................................................................................... 274FAQ .............................................................................................................................. 275Podsumowanie ............................................................................................................. 275
Rozdział 7. Programowanie obiektowe ................................................................................................................... 277Klasy ............................................................................................................................ 277
Składnia klasy ........................................................................................................ 278Do czego służą klasy? ............................................................................................ 278Hermetyzacja ......................................................................................................... 279Dziedziczenie ......................................................................................................... 280Polimorfizm ........................................................................................................... 280Instancja klasy ........................................................................................................ 280Konstruktor ............................................................................................................ 281Destruktor .............................................................................................................. 281Pola ........................................................................................................................ 281Metody ................................................................................................................... 282Tworzenie konstruktorów i destruktorów ............................................................... 283Destruktory w .NET ............................................................................................... 286Poziomy dostępu do klasy ...................................................................................... 290Dziedziczenie ......................................................................................................... 292Przeciążanie metod ................................................................................................. 293Typy metod ............................................................................................................ 293Przedefiniowanie metod ......................................................................................... 295Typy zagnieżdżone ................................................................................................. 299Parametr Self .......................................................................................................... 300Brak konstruktora ................................................................................................... 301Brak instancji klasy ................................................................................................ 302Class helpers .......................................................................................................... 304Klasy zaplombowane ............................................................................................. 305Słowo kluczowe static ............................................................................................ 305Właściwości ........................................................................................................... 306
Parametr Sender procedury zdarzeniowej .................................................................... 309Przechwytywanie informacji o naciśniętym klawiszu ............................................ 310Obsługa parametru Sender ..................................................................................... 312
Operatory is i as ............................................................................................................ 313Metody w rekordach ..................................................................................................... 314Interfejsy ...................................................................................................................... 315Przeładowanie operatorów ........................................................................................... 316
Jakie operatory można przeładować? ..................................................................... 317Deklaracja operatorów ........................................................................................... 317Binary i Unary ........................................................................................................ 319
Wyjątki ......................................................................................................................... 319Słowo kluczowe try..except ................................................................................... 320Słowo kluczowe try..finally .................................................................................... 321
12 Delphi 2005. Kompendium programisty
Słowo kluczowe raise ............................................................................................. 322Klasa Exception ..................................................................................................... 322Selektywna obsługa wyjątków ............................................................................... 323Zdarzenie OnException .......................................................................................... 324
Identyfikatory ............................................................................................................... 326Boksowanie typów ....................................................................................................... 327Przykład wykorzystania klas ........................................................................................ 328
Zasady gry .............................................................................................................. 328Specyfikacja klasy .................................................................................................. 329Zarys klasy ............................................................................................................. 330Sprawdzenie wygranej ........................................................................................... 333Interfejs aplikacji .................................................................................................... 337Tworzenie interfejsu graficznego ........................................................................... 340Gra Kółko i krzyżyk ............................................................................................... 341
Biblioteka VCL/VCL.NET ........................................................................................... 352Klasa TApplication ................................................................................................ 353Właściwości ........................................................................................................... 356Zdarzenia ................................................................................................................ 361
Programowanie w .NET ............................................................................................... 365Wspólny model programowania ............................................................................ 366Klasa System.Object .............................................................................................. 366
Test ............................................................................................................................... 368FAQ .............................................................................................................................. 369Podsumowanie ............................................................................................................. 370
Rozdział 8. Podzespoły .NET .......................................................................................................................................371Czym jest COM? .......................................................................................................... 371
Kontrolka w rozumieniu COM .............................................................................. 372Odrobinę historii .................................................................................................... 372ActiveX .................................................................................................................. 372DCOM ................................................................................................................... 373
Podstawowe podzespoły ............................................................................................... 373Słowo o funkcji ShellExecute ................................................................................ 375Deasembler .NET ................................................................................................... 376
Obiektowość .NET ....................................................................................................... 378Transformacja modułu ........................................................................................... 380
Komponenty .NET ....................................................................................................... 381Przygotowanie komponentu w Delphi ................................................................... 382Przygotowanie komponentu C# ............................................................................. 383Włączenie podzespołu w Delphi ............................................................................ 385
Atrybuty podzespołu .................................................................................................... 385Korzystanie z programu Reflection ........................................................................ 388
Mechanizm reflection ................................................................................................... 389Metadane ................................................................................................................ 389Funkcja GetType .................................................................................................... 389Klasa System.Type ................................................................................................. 390Ładowanie podzespołu ........................................................................................... 391Przykład — własny program Reflection ................................................................ 392Własne atrybuty ..................................................................................................... 398
Aplikacje .NET Framework SDK ................................................................................. 401Global Assembly Cache Tool ................................................................................ 402WinCV ................................................................................................................... 404
Spis treści 13
Narzędzie konfiguracji .NET Framework .............................................................. 404PEVerify — narzędzie weryfikacji ........................................................................ 405
Test ............................................................................................................................... 405FAQ .............................................................................................................................. 406Podsumowanie ............................................................................................................. 406
Rozdział 9. Wykrywanie błędów w aplikacjach ................................................................................................407Rodzaje błędów ............................................................................................................ 408Opcje kompilatora ........................................................................................................ 409Częste błędy programisty ............................................................................................. 411
Niezainicjalizowane zmienne obiektowe ............................................................... 411Zwalnianie obiektów .............................................................................................. 412Tablice .................................................................................................................... 412
Wskaźniki ..................................................................................................................... 413Rejestry .................................................................................................................. 414Stos ........................................................................................................................ 414Sterta ...................................................................................................................... 415Do czego służą wskaźniki? ..................................................................................... 415Tworzenie wskaźnika ............................................................................................. 415Przydział danych do wskaźników .......................................................................... 417Tworzenie wskaźników na struktury ...................................................................... 418Przydział i zwalnianie pamięci ............................................................................... 419Wartość pusta ......................................................................................................... 420
Debuger Delphi ............................................................................................................ 420Interfejs Debug ....................................................................................................... 420Opcje projektu ........................................................................................................ 421Punkty przerwań .................................................................................................... 423Polecenie Run to Cursor ......................................................................................... 428Podgląd zmiennych ................................................................................................ 429Inspektor śledzenia ................................................................................................. 431Evaluate/Modify ..................................................................................................... 432Okno Call Stack ..................................................................................................... 434Okno Local Variables ............................................................................................ 434Okno Thread Status ................................................................................................ 435Okno Event Log ..................................................................................................... 436Okno modułów ....................................................................................................... 437Okno deasemblacji ................................................................................................. 438Polecenie Go to Address ........................................................................................ 438Okno Message View .............................................................................................. 439
Praca krokowa .............................................................................................................. 440Ikony na gutterze .................................................................................................... 440Przekraczanie i wkraczanie .................................................................................... 441
Opcje debugera ............................................................................................................. 442Strona Borland Debuggers ..................................................................................... 443Zakładka Language Exceptions .............................................................................. 444Zakładka Native OS Exceptions ............................................................................. 444Zakładka Event Log ............................................................................................... 444
Menu związane z debugerem ....................................................................................... 445Test ............................................................................................................................... 446FAQ .............................................................................................................................. 447Podsumowanie ............................................................................................................. 448
14 Delphi 2005. Kompendium programisty
Rozdział 10. Praca z plikami .........................................................................................................................................449Definicja pliku .............................................................................................................. 450Pliki tekstowe ............................................................................................................... 450
Inicjalizacja ............................................................................................................ 450Tworzenie nowego pliku ........................................................................................ 451Otwieranie istniejącego pliku ................................................................................. 451Odczyt plików tekstowych ..................................................................................... 452Zapis nowych danych w pliku ................................................................................ 453Zapis danych na końcu pliku .................................................................................. 454
Pliki amorficzne ........................................................................................................... 455Otwieranie i zamykanie plików .............................................................................. 455Tryb otwarcia pliku ................................................................................................ 456Zapis i odczyt danych ............................................................................................. 456Przykład działania — kopiowanie plików .............................................................. 457
Inne funkcje operujące na plikach ................................................................................ 460Funkcje operujące na katalogach .................................................................................. 462Pliki typowane .............................................................................................................. 463
Deklaracja .............................................................................................................. 463Tworzenie pliku i dodawanie danych ..................................................................... 464Odczyt rekordu z pliku ........................................................................................... 465Przykład działania — książka adresowa ................................................................ 465
Kopiowanie i przenoszenie plików ............................................................................... 472Kopiowanie ............................................................................................................ 472Przenoszenie pliku ................................................................................................. 472Struktura TSHFileOpStruct .................................................................................... 473
Strumienie .................................................................................................................... 475Podział strumieni .................................................................................................... 475Prosty przykład na początek ................................................................................... 476Konstruktor klasy TFileStream .............................................................................. 477Pozostałe metody i właściwości klasy TStream ..................................................... 478Właściwości ........................................................................................................... 478Metody ................................................................................................................... 479Praktyczny przykład ............................................................................................... 480
Wyszukiwanie .............................................................................................................. 486Rekord TSearchRec ............................................................................................... 487Jak zrealizować wyszukiwanie? ............................................................................. 487Rekurencja ............................................................................................................. 488Praktyczny przykład ............................................................................................... 489
Informacja o dyskach ................................................................................................... 493Pobieranie listy dysków ......................................................................................... 493Pobieranie informacji o rozmiarze dysku ............................................................... 494Pobieranie dodatkowych informacji ....................................................................... 494
Obsługa plików w .NET ............................................................................................... 497Klasy przestrzeni nazw System.IO ......................................................................... 497Praca z plikami ....................................................................................................... 498Praca z katalogami ................................................................................................. 500Strumienie .............................................................................................................. 502Praca z plikami ....................................................................................................... 502
Test ............................................................................................................................... 504FAQ .............................................................................................................................. 505Podsumowanie ............................................................................................................. 507
Spis treści 15
Rozdział 11. Migracja do .NET ................................................................................................................................... 509Czy warto przechodzić do .NET? ................................................................................. 510Ewolucja platform programistycznych ......................................................................... 510
WinFX ................................................................................................................... 511Brakujące komponenty ................................................................................................. 512
Zmiany we właściwościach .................................................................................... 512Elementy języka ........................................................................................................... 512
Wszystko jest klasą! ............................................................................................... 512Przestrzenie nazw ................................................................................................... 513Kompilacja warunkowa .......................................................................................... 513Brakujące elementy ................................................................................................ 515Ciągi znakowe w Delphi ........................................................................................ 523Komunikaty ............................................................................................................ 531Destruktory ............................................................................................................. 531
WinForms ..................................................................................................................... 532Brak pliku *.dfm/*.nfm .......................................................................................... 533VCL i WinForms ................................................................................................... 537
Platform Invoke ............................................................................................................ 538Wywołanie standardowe ........................................................................................ 539Użycie atrybutu DLLImport ................................................................................... 540Parametry wyjściowe ............................................................................................. 541Dane wskaźnikowe ................................................................................................. 543Pobieranie danych z bufora .................................................................................... 544Kod zarządzany i niezarządzany ............................................................................ 545Używanie funkcji Win32 ....................................................................................... 545Marshaling ............................................................................................................. 546Wady PInvoke ........................................................................................................ 558
.NET a obiekty COM ................................................................................................... 558Terminologia COM ................................................................................................ 559Mechanizm COM Callable Wrappers .................................................................... 560Przykładowy podzespół ......................................................................................... 561Utworzenie biblioteki typu ..................................................................................... 564Użycie biblioteki typu ............................................................................................ 564Korzystanie z klasy COM ...................................................................................... 565Kontrolki COM w aplikacjach .NET ...................................................................... 569
Aplikacje sieciowe ....................................................................................................... 570Test ............................................................................................................................... 570FAQ .............................................................................................................................. 571Podsumowanie ............................................................................................................. 572
Rozdział 12. Co nowego w Delphi 2005? ...................................................................................................................573Trzy osobowości .......................................................................................................... 573IDE Delphi ................................................................................................................... 574
Strona powitalna .................................................................................................... 574Historia i kopie zapasowe ...................................................................................... 574Okno struktury ....................................................................................................... 575Synchroniczna edycja ............................................................................................. 575Help Insight ............................................................................................................ 576Wyróżnianie błędów .............................................................................................. 577Paleta narzędzi ....................................................................................................... 577Wyszukiwanie ........................................................................................................ 577Pozostałe ................................................................................................................ 578
16 Delphi 2005. Kompendium programisty
Debuger ........................................................................................................................ 578HTML .......................................................................................................................... 579Bazy danych ................................................................................................................. 579
dbGo for ADO ....................................................................................................... 579dbExpress ............................................................................................................... 579BDP.NET ............................................................................................................... 579Pozostałe ................................................................................................................ 580
Refaktoryzacja .............................................................................................................. 580Zmiany w języku Delphi .............................................................................................. 580
Wplatanie funkcji i procedur .................................................................................. 580Pętla for-in ............................................................................................................. 581Kodowanie Unicode ............................................................................................... 583
Podsumowanie ............................................................................................................. 583
Część II .....................................................................................................................................585
Rozdział 13. Architektura bazodanowa Delphi ..................................................................................................... 587Czym jest baza danych? ............................................................................................... 587Działanie baz danych .................................................................................................... 588Rozwiązania alternatywne ............................................................................................ 589Baza danych a własny mechanizm ............................................................................... 590Rodzaje baz danych ...................................................................................................... 591
Bazy proste ............................................................................................................. 591Relacyjne bazy danych ........................................................................................... 591Bazy danych typu klient-serwer ............................................................................. 592Wielowarstwowa architektura baz danych ............................................................. 593
Borland Database Engine ............................................................................................. 593Sterowniki bazy danych ......................................................................................... 593Zbiory danych ........................................................................................................ 594Komponenty bazodanowe ...................................................................................... 595
Praca z komponentami ................................................................................................. 599Otwieranie i zamykanie zbioru danych .................................................................. 599Nawigowanie wśród rekordów ............................................................................... 600Modyfikacja zawartości ......................................................................................... 602Pola rekordu bazy danych ...................................................................................... 603
Edytor pól ..................................................................................................................... 607Pola obliczeniowe .................................................................................................. 608Pola przeglądowe ................................................................................................... 609
SQL Explorer ............................................................................................................... 610Tworzenie aliasu .................................................................................................... 610
Praca z tabelami ........................................................................................................... 611Tworzenie tabel ...................................................................................................... 612Tworzenie kolumn w kodzie programu .................................................................. 612
Filtrowanie danych ....................................................................................................... 614Wykorzystanie właściwości Filter .......................................................................... 615Zdarzenie OnFilterRecord ...................................................................................... 616
Wyszukiwanie rekordów .............................................................................................. 617Metoda Locate ........................................................................................................ 618Metoda FindKey ..................................................................................................... 619
Przykładowa aplikacja .................................................................................................. 619Założenia ................................................................................................................ 620Tworzenie interfejsu ............................................................................................... 621
Spis treści 17
Kod źródłowy aplikacji .......................................................................................... 625Ćwiczenia dodatkowe ............................................................................................ 636
Zakładki ........................................................................................................................ 636Pozostałe komponenty bazodanowe ............................................................................. 637
Komponent TDbGrid ............................................................................................. 637Komponent TDbNavigator ..................................................................................... 637Komponent TDbText ............................................................................................. 638Komponent TDbEdit .............................................................................................. 639Komponent TDbMemo .......................................................................................... 639Komponent TDbRichEdit ...................................................................................... 639Komponent TDbImage ........................................................................................... 639Komponent TDbCheckBox .................................................................................... 639
Test ............................................................................................................................... 640FAQ .............................................................................................................................. 640Podsumowanie ............................................................................................................. 642
Rozdział 14. dbExpress ....................................................................................................................................................643Architektura klient-serwer ............................................................................................ 643
Klient ..................................................................................................................... 644Serwer .................................................................................................................... 644Klient-serwer oraz bazy lokalne ............................................................................. 645
Język SQL .................................................................................................................... 646Baza MySQL .......................................................................................................... 646InterBase ................................................................................................................ 647
Schemat tworzenia aplikacji klient-serwer ................................................................... 647Analiza ................................................................................................................... 647Projekt .................................................................................................................... 648Budowa .................................................................................................................. 648
Programowanie w SQL ................................................................................................ 648Klient MySQL ........................................................................................................ 649Tworzenie bazy danych .......................................................................................... 651Tworzenie tabel ...................................................................................................... 651Zmiana struktury tabeli .......................................................................................... 657Indeksy ................................................................................................................... 659Dodawanie rekordów ............................................................................................. 663Wyświetlanie informacji ........................................................................................ 664Uaktualnianie zawartości ....................................................................................... 670Usuwanie danych z tabeli ....................................................................................... 671Eksport i import bazy ............................................................................................. 671
Aplikacja zarządzająca MySQL ................................................................................... 672Praca z programem MySQL Control Center .......................................................... 673Praca z tabelami ..................................................................................................... 674
InterBase ...................................................................................................................... 676Uruchomienie ......................................................................................................... 677Program IBConsole ................................................................................................ 678MySQL a InterBase ................................................................................................ 681Tworzenie tabel InterBase ...................................................................................... 690
dbExpress ..................................................................................................................... 692dbExpress a BDE ................................................................................................... 692Połączenie z bazą danych ....................................................................................... 692Komponent TSQLDataSet ..................................................................................... 698Komponent TSQLMonitor ..................................................................................... 703
18 Delphi 2005. Kompendium programisty
Pozostałe komponenty dbExpress .......................................................................... 705Dystrybucja aplikacji dbExpress ............................................................................ 705
Okno Data Explorer ..................................................................................................... 705Wprowadzanie zmian w tabeli ............................................................................... 707Edytor połączeń ...................................................................................................... 707
Test ............................................................................................................................... 708FAQ .............................................................................................................................. 709Podsumowanie ............................................................................................................. 709
Rozdział 15. IBX ..................................................................................................................................................................711Dlaczego IBX? ............................................................................................................. 711
Zalety IBX ............................................................................................................. 712Komponenty IBX ......................................................................................................... 713
Komponent TIBDatabase ....................................................................................... 713Komponent TIBDataSet ......................................................................................... 716Komponenty reprezentujące dane .......................................................................... 719TIBSQLMonitor ..................................................................................................... 720Komponenty administracyjne ................................................................................. 720
Łączenie ze zdalnym serwerem .................................................................................... 720Przykład wykorzystania IBX ........................................................................................ 721
Tworzenie bazy danych .......................................................................................... 722Piszemy aplikację Helion DB! ............................................................................... 729
Test ............................................................................................................................... 732FAQ .............................................................................................................................. 732Podsumowanie ............................................................................................................. 733
Rozdział 16. Przegląd ADO.NET ................................................................................................................................735Czym jest ADO? .......................................................................................................... 735Terminologia ................................................................................................................ 736Warstwy dostępu .......................................................................................................... 737Architektura baz danych ............................................................................................... 738ADO.NET .................................................................................................................... 739
Architektura ADO.NET ......................................................................................... 739Źródło danych ........................................................................................................ 739Dostawca danych ................................................................................................... 740Zbiory danych ........................................................................................................ 740
ADO.NET w praktyce .................................................................................................. 741Łączenie ze źródłem ODBC ................................................................................... 741Łączenie ze źródłem OleDB ................................................................................... 742Wysyłanie zapytań (MS Access) ............................................................................ 743
Sterowniki zarządzane .................................................................................................. 746Test ............................................................................................................................... 747FAQ .............................................................................................................................. 748Podsumowanie ............................................................................................................. 749
Rozdział 17. BDP.NET .....................................................................................................................................................751BDP.NET ..................................................................................................................... 751Łączenie z bazą InterBase ............................................................................................ 752
Komponent BDPConnection .................................................................................. 754Komponent BdpCommand ..................................................................................... 754Komponent BdpDataAdapter ................................................................................. 755Wyświetlanie zwartości tabeli ................................................................................ 758
Spis treści 19
Praca z danymi ............................................................................................................. 759Zapytania SQL ....................................................................................................... 760
Dystrybucja aplikacji BDP.NET .................................................................................. 760MySQL w ADO.NET ................................................................................................... 761
Korzystanie ze sterownika MySQL ........................................................................ 762Komponenty wizualne ........................................................................................... 768
Test ............................................................................................................................... 770FAQ .............................................................................................................................. 770Podsumowanie ............................................................................................................. 771
Część III .................................................................................................................................. 773
Rozdział 18. XML ............................................................................................................................................................. 775Niezależność XML ....................................................................................................... 776XHTML ........................................................................................................................ 776Budowa dokumentu ...................................................................................................... 776
Prolog ..................................................................................................................... 777Znaczniki ................................................................................................................ 778Atrybuty ................................................................................................................. 780Podstawowa terminologia ...................................................................................... 780Węzeł główny ........................................................................................................ 781Komentarze ............................................................................................................ 781Przestrzenie nazw ................................................................................................... 781Składnia przestrzeni nazw ...................................................................................... 782Przestrzenie nazw i atrybuty ................................................................................... 782
DTD ............................................................................................................................. 783Deklaracja elementu ............................................................................................... 784Deklaracja atrybutu ................................................................................................ 784DTD w osobnym pliku ........................................................................................... 786
Encje tekstowe .............................................................................................................. 787XSD .............................................................................................................................. 788
Nagłówek XSD ...................................................................................................... 789Elementy XSD ....................................................................................................... 789Typy danych ........................................................................................................... 790Typy proste ............................................................................................................ 790
XML a bazy danych ..................................................................................................... 793XSL .............................................................................................................................. 793DOM ............................................................................................................................ 794SAX .............................................................................................................................. 795Korzystanie z System.XML ......................................................................................... 795
Ładowanie pliku XML ........................................................................................... 795Odczyt dowolnego elementu .................................................................................. 796Odczyt wartości atrybutów ..................................................................................... 798Tworzenie pliku XML ............................................................................................ 801Eksport danych do postaci XML ............................................................................ 806Modyfikacja plików ............................................................................................... 808
Test ............................................................................................................................... 811FAQ .............................................................................................................................. 812Podsumowanie ............................................................................................................. 813
20 Delphi 2005. Kompendium programisty
Rozdział 19. IntraWeb ......................................................................................................................................................815Czym właściwie jest IntraWeb? ................................................................................... 815Dynamiczne strony WWW ........................................................................................... 816
CGI, ISAPI, NSAPI ............................................................................................... 816PHP ........................................................................................................................ 818
Tworzenie projektu IntraWeb ....................................................................................... 819Praca z komponentami ........................................................................................... 820Praca z kodem ........................................................................................................ 820Uruchamianie programu ......................................................................................... 821
Serwer IntraWeb .......................................................................................................... 821Obsługa serwera ..................................................................................................... 822
Generowanie zdarzeń ................................................................................................... 822Zdarzenia zastępcze ............................................................................................... 823
Kilka formularzy w jednym projekcie .......................................................................... 825Funkcja ShowMessage w IntraWeb ....................................................................... 826
Elementy HTML i JavaScript ....................................................................................... 827Wysyłanie plików ......................................................................................................... 828IntraWeb jako rozszerzenie ISAPI ............................................................................... 828
Konwertowanie aplikacji do ISAPI ........................................................................ 829Test ............................................................................................................................... 831FAQ .............................................................................................................................. 831Podsumowanie ............................................................................................................. 831
Rozdział 20. ASP.NET .....................................................................................................................................................833Dynamiczne strony WWW ........................................................................................... 833
ASP ........................................................................................................................ 834ASP.NET ............................................................................................................... 834
ASP i ASP.NET ........................................................................................................... 835Zmiany w kodzie .................................................................................................... 835Kompilacja kodu .................................................................................................... 835Migracja do ASP.NET ........................................................................................... 835Zgodność ze standardem XHTML ......................................................................... 838
Narzędzia ...................................................................................................................... 839Edytor ..................................................................................................................... 839Serwer .................................................................................................................... 840Instalacja ASP.NET ............................................................................................... 841Co trzeba umieć? .................................................................................................... 842
ASP.NET w Delphi ...................................................................................................... 842Elementy interfejsu ................................................................................................ 843Pierwszy projekt ..................................................................................................... 844Opcje ASP.NET ..................................................................................................... 845
Web Forms ................................................................................................................... 845Przestrzeń nazw System.Web.UI ........................................................................... 845
Praca z ASP.NET ......................................................................................................... 846Kontrolki działające po stronie serwera ................................................................. 847Zdarzenia komponentów ........................................................................................ 848Kontrolki Web Forms ............................................................................................ 851Code Behind ........................................................................................................... 856Kontrolki użytkownika ........................................................................................... 858Tworzenie kontrolek w Delphi ............................................................................... 860Komponenty .NET w ASP.NET ............................................................................ 864Konfiguracja stron ASP.NET ................................................................................. 872
Spis treści 21
Sesje ....................................................................................................................... 875Wysyłanie wiadomości e-mail ............................................................................... 880Monitorowanie stron ASP.NET ............................................................................. 881Pamięć podręczna .................................................................................................. 881
Bazy danych w ASP.NET ............................................................................................ 883Łączenie się z bazą ................................................................................................. 883Kontrolki bazodanowe ........................................................................................... 885
Technologie internetowe .............................................................................................. 887Komponenty HTML Producer ............................................................................... 888WebBroker ............................................................................................................. 888Internet Express ...................................................................................................... 888WebSnap ................................................................................................................ 888IntraWeb ................................................................................................................ 889ASP.NET ............................................................................................................... 889
Test ............................................................................................................................... 889FAQ .............................................................................................................................. 890Podsumowanie ............................................................................................................. 891
Rozdział 21. Usługi sieciowe .......................................................................................................................................... 893Czym są usługi sieciowe? ............................................................................................. 893Działanie usług sieciowych .......................................................................................... 895
HTTP ..................................................................................................................... 895XML ....................................................................................................................... 895Infrastruktura usług sieciowych ............................................................................. 895
Użycie usług sieciowych .............................................................................................. 898Wyszukiwarka google.com .................................................................................... 898Interfejs aplikacji .................................................................................................... 900Ładowanie usługi sieciowej ................................................................................... 900Korzystanie z usługi Web ...................................................................................... 902
Usługi sieciowe w Delphi ............................................................................................. 908Tworzenie usługi sieciowej .................................................................................... 909Podgląd usługi sieciowej ........................................................................................ 911Usługa Web na stronie ASP.NET .......................................................................... 915Plik źródłowy *.asmx ............................................................................................. 917
Bezpieczeństwo usług sieciowych ................................................................................ 917Bazy danych ................................................................................................................. 919
Projektowanie usługi .............................................................................................. 920Sprawdzanie usługi sieciowej ................................................................................ 927Usługa sieciowa w aplikacji ASP.NET .................................................................. 927
Test ............................................................................................................................... 930FAQ .............................................................................................................................. 930Podsumowanie ............................................................................................................. 931
Rozdział 22. Odpowiedzi ................................................................................................................................................. 933Rozdział 1. .................................................................................................................... 933Rozdział 2. .................................................................................................................... 934Rozdział 3. .................................................................................................................... 934Rozdział 4. .................................................................................................................... 935Rozdział 5. .................................................................................................................... 935Rozdział 6. .................................................................................................................... 935Rozdział 7. .................................................................................................................... 936Rozdział 8. .................................................................................................................... 936
22 Delphi 2005. Kompendium programisty
Rozdział 9. .................................................................................................................... 937Rozdział 10. .................................................................................................................. 937Rozdział 11. .................................................................................................................. 937Rozdział 13. .................................................................................................................. 938Rozdział 14 ................................................................................................................... 938Rozdział 15 ................................................................................................................... 938Rozdział 16 ................................................................................................................... 939Rozdział 17 ................................................................................................................... 939Rozdział 18 ................................................................................................................... 939Rozdział 19 ................................................................................................................... 940Rozdział 20 ................................................................................................................... 940Rozdział 21 ................................................................................................................... 940
Dodatki ................................................................................................................................... 941
Dodatek A Podstawy języka C# ............................................................................................................................... 943C# w Delphi ................................................................................................................. 943Biblioteka klas .............................................................................................................. 944Podstawowa składnia ................................................................................................... 944
C# jako język obiektowy ........................................................................................ 945Metoda Main() ....................................................................................................... 946
Zmienne ........................................................................................................................ 948Deklaracja kilku zmiennych ................................................................................... 949Przydział danych .................................................................................................... 950
Stałe .............................................................................................................................. 950Tablice .......................................................................................................................... 951
Tablice wielowymiarowe ....................................................................................... 952Operatory ...................................................................................................................... 952
Operatory inkrementacji ......................................................................................... 954Operatory przypisania ............................................................................................ 955Operator rzutowania ............................................................................................... 955
Instrukcje warunkowe .................................................................................................. 956Instrukcja if ............................................................................................................ 956Instrukcja switch .................................................................................................... 956Operator trójoperandowy ....................................................................................... 957
Funkcje w C# ............................................................................................................... 958Parametry funkcji ................................................................................................... 958Przekazywanie parametrów .................................................................................... 959
Pętle .............................................................................................................................. 960Pętla for .................................................................................................................. 960Pętla foreach ........................................................................................................... 961Pętla while .............................................................................................................. 962Pętla do..while ........................................................................................................ 962
Klasy ............................................................................................................................ 963Tworzenie instancji klasy ....................................................................................... 963Metody ................................................................................................................... 964Pola ........................................................................................................................ 964Konstruktor ............................................................................................................ 965Właściwości ........................................................................................................... 965
Struktury ....................................................................................................................... 967Podsumowanie ............................................................................................................. 967
Spis treści 23
Dodatek B Akronimy ....................................................................................................................................................969
Dodatek C Spis przestrzeni nazw .NET ..................................................................................................................971
Dodatek D Słowniczek ................................................................................................................................................... 977
Dodatek E Zasady pisania kodu ............................................................................................................................... 993Stosowanie wcięć ......................................................................................................... 994Instrukcje begin i end ................................................................................................... 994Styl ,,wielbłądzi’’ w nazwach procedur ....................................................................... 995Stosuj wielkie litery ...................................................................................................... 995Parametry procedur ...................................................................................................... 996Instrukcja if .................................................................................................................. 996Instrukcja case .............................................................................................................. 996Obsługa wyjątków ........................................................................................................ 997Klasy ............................................................................................................................ 997Komentarze .................................................................................................................. 997Pliki i nazwy formularzy .............................................................................................. 998Notacja węgierska ........................................................................................................ 998Czy warto? ................................................................................................................... 998
Skorowidz ...................................................................................................................................................1001
5.Przegląd .NET Framework
W rozdziale 2. omówiłem podstawowe aspekty platformy .NET. Czytelnik powinien już znaćpodstawowe pojęcia związane z tą technologią, a także umieć pisać proste aplikacje w Delphi.Jak dotąd jednak przykłady prezentowane przeze mnie w rozdziale 3. były oparte na progra-mowaniu dla Win32.
W tym rozdziale zajmiemy się tylko i wyłącznie programowaniem dla platformy .NET orazdokładniej omówimy technologie związane z tą platformą.
Środowisko .NET Framework obejmuje swym zakresem wszystkie warstwy tworzenia opro-gramowania: od systemu operacyjnego po bibliotekę klas (jak np. Windows Forms).
W tym rozdziale:
� przedstawię szczegóły działania środowiska CLR,
� omówię nowe pojęcia: kod zarządzany i niezarządzany,
� opiszę, czym jest CLS i CTS.
Środowisko CLRWspólne środowisko uruchomieniowe (CLR) stanowi podstawowy element platformy .NET Fra-mework. W momencie uruchomienia aplikacji .NET, CLR odpowiada za jej sprawne wykonanie(załadowanie do pamięci), przydział pamięci, obsługę błędów itp. W standardowym modeluprogramowania — Win32, za tego typu czynności odpowiadał zwyczajnie system operacyjny(Windows). Po zainstalowaniu na komputerze środowiska .NET Framework, odpowiednie bi-blioteki systemu pozwalają na rozpoznanie, czy dany program jest aplikacją Win32, czy też
228 Część I
.NET. Jeżeli jest to aplikacja .NET, uruchomione zostaje środowisko CLR, pod kontrolą któregodziała program. To, co dzieje się „w tle” nas nie interesuje, nie trzeba się tym przejmować.
W jaki jednak sposób system operacyjny rozpoznaje, która aplikacja jest aplikacją .NET? Dziejesię tak dlatego, że aplikacja wykonywalna .NET (plik .exe) jest inaczej zbudowana niż standar-dowe programy Win32. Tę kwestię postaram się wyjaśnić w paru kolejnych podrozdziałach.
Kod pośredni IL
Kompilatory działające pod kontrolą systemu Windows kompilują kody źródłowe do postaci32-bitowego kodu maszynowego. W efekcie otrzymujemy aplikacje .exe czy biblioteki .dll. Takisposób uniemożliwia przeniesienie aplikacji na urządzenia czy systemy, które działają podkontrolą innych procesorów. Może także stwarzać problemy z innymi wersjami systemu ope-racyjnego (w tym wypadku Windows). Wszystko dlatego, że aplikacje wykonywalne komunikująsię z API, które może różnić się w poszczególnych wersjach systemu.
Rozwiązaniem tego problemu jest kompilacja programu do kodu pośredniego, nazywanego Com-mon Language Infrastructure (z ang. architektura wspólnego języka, CLI).
Wskazówka
CLI na platformie .NET jest często nazywany MSIL (Microsoft Intermediate Language)lub po prostu — IL.
Kod pośredni IL przypomina kod języka Asembler:
����������� ������ ������������������������������������������������������������������������������������������� !������ ���"��#��$%&����'�������!��$%&���!'�����������$%&��!(��$%&����'����������$%&���)'�����������������*+ ����,+ ��������������-������������������������������������.��/����0.��/���!''������������$%&���1'�����������$%&��!(��$%&����'����������$%&����'�����������������*+ ����,+ ��������������-������������������������������������.��/����0.��/���!''������������$%&��!!'�������������������������*+ ����,+ ��������������-�������������''�����������$%&��!('����������$%&��!2'�������!��$%&��!3'�����������������������������������������������*+ �����.����4��/����,+ �����.����4��/�����/���''���������������$%&��!�'�����5�����������������0.��/���!''�������
Rozdział 5. � Przegląd .NET Framework 229
W takiej postaci kod IL jest kompilowany do kodu maszynowego, który może już zostać uru-chomiony. Tak właśnie działa język Java, z którego pomysł zaczerpnął Microsoft projektującplatformę .NET.
Wszystko to jest możliwe dzięki tzw. maszynom wirtualnym, czyli aplikacjom przystosowanymdo konkretnej wersji systemu/procesora. Środowisko CLR odpowiada za kompilację kodu po-średniego na maszynowy, w trakcie uruchamiania aplikacji. Dzieje się to jednak na tyle szybko,że dla użytkownika jest to niezauważalne.
Wskazówka
Możliwe jest również jednorazowe skompilowanie danego programu od razu na kodmaszynowy, dzięki temu przy każdym uruchamianiem programu są oszczędzanezasoby systemowe, potrzebne do uruchomienia kompilatora JIT (ang. Just-In-Time).
Kod zarządzany i niezarządzany
Platforma .NET definiuje dwa nowe pojęcia: kod zarządzany (managed code) oraz niezarzą-dzany (ang. unmanaged code), które są istotne z punktu widzenia CLR. Kod niezarządzanyjest zwykłym kodem, wykonywanym poza środowiskiem .NET, zatem określenie to oznacza stareaplikacje kompilowane dla środowiska Win32. Natomiast — jak nietrudno się domyśleć — kodzarządzany jest wykonywany pod kontrolą CLR.
Zmiany w Delphi 2005 oraz w .NET w porównaniu z Win32 są na tyle duże, że problememstaje się współdziałanie obu rodzajów aplikacji (aplikacji .NET oraz Win32), jak również ko-rzystanie z zasobów starszych aplikacji Win32 — np. bibliotek DLL. Dlatego też w .NETw tym celu wykorzystuje się mechanizm zwany marshalingiem 1, który jest związany z określe-niem sposobu, w jaki dane mają być przekazywane z kodu niezarządzanego do zarządzanego.Tym jednak nie należy się teraz przejmować — podejmę ten temat w rozdziale 11.
Moduł zarządzany
Każdy moduł zarządzany jest przenośnym plikiem systemu Windows. Moduły zarządzane sągenerowane przez kompilatory zgodne z platformą .NET, a w ich skład wchodzą następująceelementy:
� Nagłówek PE (ang. PE Header) — standardowy nagłówek pliku wykonywalnegosystemu Windows,
� Nagłówek CLR (ang. CLR Header) — dodatkowe informacje, charakterystycznedla danego środowiska CLR,
1Niestety nie znalazłem dobrego, polskiego odpowiednika tego słowa, które w pełni oddawałoby istotę
rzeczy.
230 Część I
� Metadane (ang. metadata) — informacje o typach modułów używanych w programieoraz ich wzajemnych powiązaniach,
� Kod zarządzany (ang. managed code) — wspólny kod generowany przez kompilatory.NET (kod IL).
Wskazówka
Informacje o metadanych znajdują się w 8. rozdziale tej książki.
Podzespoły
To jest bardzo ważne pojęcie, którym nieraz będę się posługiwał w tej książce. W najprostszymujęciu podzespołem (ang. assembly) nazywamy każdą aplikację działającą pod kontrolą .NET.
Każdy moduł zarządzany wymaga podzespołu. Jeden podzespół może zawierać jeden lub więcejmodułów zarządzanych. Podzespół może zawierać również inne pliki, takie jak dokumenty,grafikę itp.
Na tym etapie zagadnienie to może wydać się Czytelnikowi niezwykle skomplikowane. Pod-zespoły mogą zawierać jeden lub więcej modułów zarządzanych, w których z kolei znajdująsię kod zarządzany oraz metadane.
Działanie CLR
Wspomniałem wcześniej, że CLR zajmuje się uruchamianiem aplikacji napisanej w .NET orazogólnie — zarządzaniem procesem jej działania. Prześledźmy proces uruchamiania aplikacjiw .NET. Oto kilka etapów, które przechodzi aplikacja od momentu, gdy użytkownik zarządzijej uruchomienie:
� ładowanie klasy (ang. Class Loader),
� weryfikacja,
� kompilacja.
Class Loader
Dotychczas jedynym formatem, rozpoznawanym przez systemy Windows jako aplikacja wyko-nywalna, był stary format PE. Stary format PE zawierał skompilowany kod maszynowy apli-kacji. Instalując bibliotekę .NET w systemie, dodawane jest uaktualnienie mówiące o nowymformacie PE, dzięki czemu system jest w stanie rozpoznać również nowy format plików wy-konywalnych.
Skoro teraz aplikacja .NET jest rozpoznawana przez system, ten w momencie jej uruchamianiaoddaje sterowanie do CLR. CLR odczytuje zawartość pliku oraz listę klas używanych w programie.
Rozdział 5. � Przegląd .NET Framework 231
Lista klas jest odczytywana z przeróżnych miejsc — szczególnie jest to manifest oraz metadane,a także plik .config, który może być dołączany do programu. Po odczytaniu klas następuje obli-czenie ilości pamięci potrzebnej, aby załadować klasy. Następnie klasy są ładowane do pamięci.
Weryfikacja
Po załadowaniu klas do pamięci zawartość programu, czyli metadane oraz kod IL, zostają pod-dane weryfikacji. Jest to ważny etap, gdyż w przypadku niepowodzenia kod IL nie zostanieprzekazany kompilatorowi JIT.
Kompilator JIT
Kompilator JIT odgrywa znaczącą rolę w procesie uruchamiania aplikacji. Po weryfikacji kodujest on przekazywany do kompilatora, który kompiluje go do kodu maszynowego, a następniegotowy program zostaje załadowany do pamięci. Znajduje się on w tej pamięci do czasu zakoń-czenia działania aplikacji.
System CTSWiadomo już, czym są typy języka programowania. Wspólny system typów (Common Type Sys-tem) jest bogatym zbiorem typów opracowanych przez firmę Microsoft na potrzeby .NET.W rzeczywistości, podczas programowania w Delphi z użyciem VCL.NET lub WinForms i zasto-sowaniem typu �������, korzystamy z typu ��������� , który należy do specyfikacji CTS.
Otwórzmy teraz okno repozytorium i wybierzmy kategorię Delphi for .NET Projects, a następnieConsole Application. Można zadeklarować dwie zmienne i spróbować skompilować program:
����$!�'�$������6��$#�'�+ �����$���#6
Kompilacja odbędzie się bezproblemowo. Typy ������� oraz ��������� są sobie równoważne.Typy takie jak ������� czy ������ są zachowane ze względu na kompatybilność projektów ze star-szymi wersjami Delphi. Programista nie musi uczyć się nazw nowych typów — wykorzystuje na-zwy dobrze mu znane i kompatybilne z .NET. Typy języka Delphi oraz ich odpowiedniki w CTSznajdują się w tabeli 5.1.
System CTS jest składnikiem CLR, odpowiada za weryfikowanie i zarządzanie tymi typami.Wszystkie typy, również te przedstawione w tabeli 5.1 wywodzą się z głównej klasy — ������������.
232 Część I
Tabela 5.1. Typy CTS
Typ Delphi Typ .NET Framework
+����� + �����+�����
7����� + �����7�����
��� + ��������
������ + �����������
$������ + �����$���#
+������ + �����$��!(
.��� + �����8$��!(
$��() + �����$��()
7 �� + �����7 ��
Specyfikacja CLSDo tej pory możliwości w komunikowaniu się pomiędzy aplikacjami były nieco ograniczone.Kod aplikacji w środowisku Win32 może być dzielony pomiędzy biblioteki DLL. Po umiesz-czeniu funkcji w bibliotece DLL, istnieje możliwość ich eksportu, co z kolei pozwala na ichwykorzystanie przez aplikacje EXE.
W środowisku .NET aplikacje mają pełną zdolność do komunikowania się. Jeden podzespół możewykorzystywać funkcje drugiego i na odwrót. Wszystko to dzięki kompilacji do kodu pośred-niego IL, do którego są kompilowane wszystkie aplikacje, bez względu na to, czy są pisanew C#, czy w Delphi. Tak więc, jeżeli napisano program do szyfrowania danych, można (jeżelitylko programista tego zechce) udostępnić jego funkcjonalność innym podzespołom. Praktyczneprzykłady tego zagadnienia zaprezentuję w rozdziale 8.
Nie tylko język pośredni ma tu znaczenie, ale również specyfikacja CLS (ang. Common Lan-guage Specification, czyli wspólna specyfikacja języków). Jest to zestaw reguł określającychnazewnictwo oraz inne kluczowe elementy języka programowania. Jeśli projektanci językaprogramowania, który docelowo ma działać dla .NET, chcą, aby był on kompatybilny z CLSoraz miał zdolność do komunikowania się z pozostałymi podzespołami, muszą dostosować swójprodukt do określonych wymagań.
Wskazówka
Na stronach firmy Microsoft można także znaleźć dodatkowe informacje na tematspecyfikacji CLS:
http://msdn.microsoft.com/net/ecma/.
Rozdział 5. � Przegląd .NET Framework 233
Biblioteka klasCzytelnik wciąż spotyka się ze słowami: klasa, obiekt, których zresztą często używam w tymrozdziale. Wspominałem wcześniej, że na platformie Win32 aplikacje korzystały z WinAPI,czyli z zestawu funkcji pomocnych przy programowaniu. Wkrótce po tym pojawiły się takiebiblioteki jak VCL, które jeszcze bardziej ułatwiały programowanie (VCL korzysta z funkcjiWinAPI).
Biblioteka klas .NET Framework (.NET Framework Class Library) stanowi zestaw setek klas,bibliotek, interfejsów, typów, które mają zastąpić WinAPI. W założeniu FCL ma połączyć funk-cjonalność WinAPI oraz dodatkowych bibliotek, takich jak VCL czy MFC (ang. Microsoft Fun-dation Classes).
Dla przykładu — w rozdziale 3. korzystaliśmy z funkcji �������, ������, które są funkcjamiDelphi umożliwiającymi operacje na konsoli. Odpowiednikiem tych funkcji na platformie .NET jestklasa ������ oraz metody ��������� oraz ��������. Oto prosty przykład programu, który pobierainformacje o imieniu użytkownika. Program korzysta z funkcji konsolowych biblioteki FCL:
�������9��:����6
�;<990=9>��?@+?%>5
����+�'�+ �����+�����6
���������������.����%����A���BCD�9��:��4�:�����EDA�6��+�'F���������G��%���6
����������.����%����A���BC�A�H�+�H�AD�I���������E�<��DA�6����������G��%���6����