You are on page 1of 22

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Visual C++ dla


programujcych
w Visual Basicu
Autor: Bill Locke
Tumaczenie: Przemysaw Ste
ISBN: 83-7197-793-X
Tytu oryginau: Visual C++ for VB Programmers
Format: B5, stron: 376

C i C++ to jzyki dla profesjonalnych programistw, ktrzy nie znosz ogranicze.


Za ich ogromne moliwoci (w C/C++ napisano wikszo systemw operacyjnych
i aplikacji uytkowych, jakie s obecnie wykorzystywane) trzeba jednak zapaci son
cen: nie jest atwo nauczy si C/C++, a jeszcze trudniej jest w nich efektywnie
programowa. Dlatego nie s one polecane jako narzdzia dla pocztkujcych. Skoro
jednak jak sugeruje tytu tej ksiki znasz ju Visual Basic, pierwsze kroki masz ju
za sob.
Dla chccego nic trudnego, zwaszcza, e wspczesne, wizualne rodowiska
programistyczne, takie jak Visual C++ Microsoftu, uatwiaj tworzenie i uruchamianie
aplikacji. Dodatkowo, na rynku pojawi si kolejny jzyk z rodziny C: C#. Znosi on wiele
trudnoci, jakie stawiay przed programist C i C++, stanowic jednoczenie
podstawowy jzyk w technologii .NET, polecanej przez Microsoft jako przyszociowy
model tworzenia aplikacji, take sieciowych.
C, C++, C# wicej moliwoci, wicej satysfakcji:

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Podstawy jzykw C i C++


Rnice midzy C a Visual Basic
C++ a Windows
Pisanie bibliotek DLL
Komponenty COM, formanty ActiveX, technologia .NET
Programowanie w jzyku C#

Spis treci
O Autorze .........................................................................................................................................................11
Wstp................................................................................................................................................................. 13
Rozdzia 1.

Najpierw troch historii ............................................................................................................................17


Historia Visual Basica i C++.............................................................................................19
rodowisko 16-bitowe ................................................................................................19
rodowisko 32-bitowe ................................................................................................24
.NET............................................................................................................................26
Znaczenie jzyka Visual Basic..........................................................................................27
Mocne strony Visual Basica .......................................................................................27
Saboci jzyka Visual Basic ......................................................................................28
Znaczenie jzyka C++.......................................................................................................30
Mocne strony C++ ......................................................................................................30
Saboci jzyka C++ ...................................................................................................31
Jzyk C# ............................................................................................................................32

Rozdzia 2.

Podstawy jzyka C......................................................................................................................................33


Elementy leksykalne .........................................................................................................34
Sowa kluczowe ..........................................................................................................34
Identyfikatory..............................................................................................................36
Stae.............................................................................................................................37
Literay........................................................................................................................40
Predefiniowane stae i makropolecenia ......................................................................42
Struktura ............................................................................................................................43
Dyrektywy...................................................................................................................43
Struktura programu .....................................................................................................52
Czas ycia ...................................................................................................................53
Zakres i widoczno....................................................................................................53
Funkcje ..............................................................................................................................56
Prototypy.....................................................................................................................56
Definicje......................................................................................................................57
Wywoywanie funkcji.................................................................................................58
main, wmain, DllMain ................................................................................................58
Wskaniki funkcji .......................................................................................................60
Podsumowanie ..................................................................................................................60

6
Rozdzia 3.

Visual C++ dla programujcych w Visual Basicu

Programowanie w jzyku C.....................................................................................................................61


Zmienne oraz dane ............................................................................................................62
Specyfikatory oraz kwalifikatory typu........................................................................62
Zmienne oraz ich deklaratory .....................................................................................63
Inicjalizacja .................................................................................................................73
Wyraenia..........................................................................................................................76
Operatory oraz ich priorytety......................................................................................76
Priorytety operatorw .................................................................................................78
Konwersje i rzutowanie typw ...................................................................................81
Instrukcje...........................................................................................................................86
Instrukcje przypisania .................................................................................................86
Instrukcje sterujce przebiegiem programu ................................................................87
Ptle.............................................................................................................................90
Podsumowanie ..................................................................................................................92

Rozdzia 4.

Podstawy jzyka C++.................................................................................................................................93


Elementy leksykalne .........................................................................................................94
Sowa kluczowe jzyka C++.......................................................................................94
Identyfikatory..............................................................................................................97
Stae oraz literay ........................................................................................................97
Struktura ............................................................................................................................97
Dyrektywy...................................................................................................................98
Zakres, widoczno oraz czas ycia..........................................................................100
czno ...................................................................................................................101
Funkcje ............................................................................................................................102
Prototypy...................................................................................................................102
Zmienna liczba parametrw......................................................................................102
Przecianie funkcji ..................................................................................................103
Zmienne oraz dane ..........................................................................................................104
RTTI informacja o typie czasu wykonania..........................................................105
Definicje oraz deklaracje w jzyku C++...................................................................106
Zmienne oraz ich deklaratory ...................................................................................108
Przestrze nazw ........................................................................................................110
Wyraenia........................................................................................................................112
Operatory ..................................................................................................................112
Rzutowanie typw ....................................................................................................116
Instrukcje.........................................................................................................................117
Obsuga bdw ........................................................................................................117
Obsuga wyjtkw jzyka C++.................................................................................118
Strukturalna obsuga wyjtkw.................................................................................120
Podsumowanie ................................................................................................................120

Rozdzia 5.

Klasy w jzyku C++ .................................................................................................................................121


Klasy................................................................................................................................121
Pojcia dotyczce programowania obiektowego ......................................................122
Podstawowe informacje o klasach ............................................................................123
Nazwy .......................................................................................................................124
Skadowe klasy .........................................................................................................125
Zmienne skadowe ....................................................................................................126
Funkcje skadowe......................................................................................................126
Sterowanie dostpem do skadowych .......................................................................136
Funkcje zaprzyjanione ............................................................................................137

Spis treci

7
Klasy pochodne ...............................................................................................................138
Podstawy ...................................................................................................................139
Wielokrotne klasy bazowe........................................................................................143
Deklaracja using........................................................................................................147
Klasy abstrakcyjne ....................................................................................................149
Podsumowanie ................................................................................................................149

Rozdzia 6.

Jzyk C++ a Windows............................................................................................................................ 151


Jak dziaa system Windows.............................................................................................152
Procesy oraz wtki ....................................................................................................152
Podsystem komunikatw ..........................................................................................152
Jak dziaa program dla Windows ....................................................................................157
Klasa Window...........................................................................................................157
Tworzenie gwnego okna........................................................................................157
Usugi podstawowe...................................................................................................158
GDI ...........................................................................................................................167
Podsumowanie ................................................................................................................172

Rozdzia 7.

Biblioteki DLL w jzyku C ..................................................................................................................173


Kurs tworzenia prostej biblioteki DLL w jzyku C ........................................................174
Tworzenie biblioteki DLL z wykorzystaniem Visual C++ ......................................174
Eksportowanie funkcji z biblioteki DLL ..................................................................175
Tworzenie prototypu funkcji.....................................................................................177
Definiowanie treci funkcji.......................................................................................178
Uruchamianie Visual Basica z poziomu rodowiska C++........................................179
Deklarowanie i wywoywanie funkcji z poziomu Visual Basica .............................182
Testowanie kodu C++ ...............................................................................................184
Podsumowanie kursu ................................................................................................186
Przekazywanie zmiennych liczbowych...........................................................................186
Typy cakowite 4-bajtowe (Long) ............................................................................186
Typy cakowite 2-bajtowe (Integer)..........................................................................188
Typy rzeczywiste 4-bajtowe (Single) .......................................................................188
Typy rzeczywiste 8-bajtowe (Double)......................................................................189
Typ logiczny (Boolean) ............................................................................................189
Typ Currency ............................................................................................................190
Korzystanie z danych acuchowych ..............................................................................190
Przekazywanie acuchw w formacie jzyka C (ByVal)........................................190
Obsuga acuchw typu BSTR................................................................................191
Przekazywanie tablic bajtw.....................................................................................193
Przekazywanie i uywanie struktur (typw UDT)..........................................................194
Przekazywanie i uywanie zmiennych wariantowych ....................................................198
Przekazywanie i uywanie tablic ....................................................................................199
Format Unicode a ANSI..................................................................................................201
Podsumowanie ................................................................................................................203

Rozdzia 8.

Biblioteki DLL w jzyku C praktyczne przykady............................................................ 205


Biblioteki typw a biblioteki DLL ..................................................................................205
Kurs tworzenia biblioteki DLL zawierajcej informacje biblioteki typw ..............206
Kilka ciekawych cech pliku IDL ..............................................................................210
Dodawanie zasobw do biblioteki DLL..........................................................................212

Visual C++ dla programujcych w Visual Basicu


Przykady biblioteki DLL w jzyku C ............................................................................213
Subclassing ...............................................................................................................213
Rozszerzenie moliwoci programu instalacyjnego InstallShield............................218
Rozszerzone procedury przechowywane..................................................................219
Wywoania zwrotne, haki i inne paskudztwa ...........................................................225
Podsumowanie ................................................................................................................228

Rozdzia 9.

Komponenty i kontrolki ........................................................................................................................229


Podstawowe wiadomoci na temat komponentw..........................................................230
Komponenty a dziedziczenie ..........................................................................................230
Dziedziczenie definicja........................................................................................231
Abstrakcja .................................................................................................................231
Kapsukowanie..........................................................................................................231
Polimorfizm ..............................................................................................................232
Dziedziczenie............................................................................................................232
Delegacja...................................................................................................................233
Agregacja ..................................................................................................................234
COM................................................................................................................................235
Interfejsy ...................................................................................................................235
Niestandardowe kontrolki ...............................................................................................240
Metody wykorzystywane do tworzenia kontrolek ..........................................................242
Visual Basic 5 oraz 6 ................................................................................................242
MFC ..........................................................................................................................243
Visual Studio .NET...................................................................................................243
Kontrolki ATL w szczegach ........................................................................................244
Tworzenie projektu kontrolki ...................................................................................244
Dodawanie waciwoci............................................................................................252
Dodawanie metod .....................................................................................................258
Implementacja zdarze .............................................................................................260
Mapy komunikatw systemu Windows....................................................................261
Obsuga myszy..........................................................................................................262
Obsuga klawiatury ...................................................................................................267
Strony waciwoci ...................................................................................................269
Poprawna trwao waciwoci ...............................................................................274
Waciwoci wyliczeniowe.......................................................................................278
Kategoryzacja waciwoci.......................................................................................283
Zwracanie bdw.....................................................................................................285
Bezpieczny w kontekcie inicjalizacji i wykonywania skryptw.............................285
Licencjonowanie .......................................................................................................286
Interfejs ISimpleFrame .............................................................................................287
Tworzenie kontrolki w oparciu o kontrolk Windows....................................................291
Zoone kontrolki ............................................................................................................293

Rozdzia 10.

Podstawy jzyka C#.................................................................................................................................297


System typw jzyka C# .................................................................................................298
Typy wartociowe w praktyce ..................................................................................298
Typy referencyjne .....................................................................................................302
Opakowywanie i odpakowywanie ............................................................................304
Koncepcje programistyczne ............................................................................................305
Przestrzenie nazw......................................................................................................305
Instrukcje...................................................................................................................308
Operatory ..................................................................................................................312

Spis treci

9
Tablice.............................................................................................................................314
Struktury..........................................................................................................................316
Klasy................................................................................................................................319
Klasa Object..............................................................................................................320
Metody ......................................................................................................................321
Waciwoci ..............................................................................................................325
Operatory ..................................................................................................................326
Dziedziczenie............................................................................................................331
Interfejsy..........................................................................................................................333
Delegaty ..........................................................................................................................335
Podsumowanie ................................................................................................................336

Rozdzia 11.

Jzyk C# w praktyce.............................................................................................................................. 337


Kontrolki Windows Forms w jzyku C#.........................................................................337
Tworzenie projektu obiektu sterujcego...................................................................338
Programowanie kontrolki..........................................................................................339
Elementy kontrolki..........................................................................................................349
Przestrzenie nazw......................................................................................................349
Waciwoci i metody ...............................................................................................350
Zdarzenia...................................................................................................................353
Pomoc na etapie projektowania ................................................................................356
Rysowanie.................................................................................................................363
Podsumowanie ................................................................................................................364

Dodatek A

Sowniczek.................................................................................................................................................... 365

Dodatek B

Tabele kodw znakw............................................................................................................................. 369

Dodatek C

Sowa kluczowe jzyka C oraz C++................................................................................................... 373


Skorowidz..................................................................................................................................................... 377

Najpierw troch historii


W tym rozdziale:
G Historia Visual Basica i C++
G Znaczenie jzyka Visual Basic
G Znaczenie jzyka C++
G Jzyk C#

Celem ksiki jest nauczenie czytelnika programowania w jzyku C, a cilej programowania w jzykach C, C++ oraz C# w celu rozszerzenia moliwoci, jakie oferuje Visual Basic.
Z tego wzgldu przedstawiona poniej historia VB jest ukierunkowana na rozwj narzdzi
programistycznych. Zanim rozpoczniemy nasz wypraw w wiat jzyka C, naley uwiadomi sobie, co nas do niej skonio. Ot historia nieraz ju pokazaa, e kady programista
powinien by elastyczny. Niezalenie od aktualnych tendencji w informatyce czy osobistych
preferencji, prdzej czy pniej pojawia si konieczno zmiany narzdzia programowania
i trzeba by na to przygotowanym. Wane jest, aby w miar moliwoci programowa w najmniejszym wsplnym mianowniku, czyli korzysta z narzdzi uniwersalnych, ktre umoliwi
wykorzystanie stworzonych fragmentw kodu w przyszoci.
Do takich z pewnoci naley czysty jzyk C. Nawet w kodzie rdowym nowoczesnych
32-bitowych obiektw sterujcych, ktre autor ksiki ma w swoim dorobku, wystpuj fragmenty
napisane w klasycznym C, ktre powstay w czasach Visual Basica 1 i 2. Co wane, w nowych
warunkach, poddane niewielkim zmianom, dziaaj rwnie dobrze jak dawniej w rodowisku
16-bitowym.
Rozwamy na przykad programowanie interfejsu graficznego (GDI Graphics Device Interface).
Na ile rnych sposobw mona stworzy kod interfejsu czysty jzyk C, biblioteki MFC,
WFC, procedury graficzne Visual Basica, obecnie klasy .NET i z pewnoci wiele innych,
ktrych nie sposb tutaj wymieni.
Wiele z tych technologii opiera si na abstrakcjach technologii niszego poziomu. W jakim
celu? Zwykle po to, aby uatwi korzystanie z funkcji oferowanych przez warstw niszego

18

Visual C++ dla programujcych w Visual Basicu

poziomu, a take po to, aby umoliwi dokonywanie modyfikacji tej warstwy bez koniecznoci
wprowadzania zmian w programach, ktre z niej korzystaj.
Z drugiej strony, jeli modyfikacjom poddawana jest stale warstwa abstrakcji, zaprzeczamy w ten
sposb jej idei. Przyjdzie co prawda taki moment, kiedy warstwa niszego poziomu (tutaj:
Windows) bdzie wymagaa gruntownej przerbki przestarzaego kodu, musimy jednak przyzna,
e warstwa abstrakcji zmienia si znacznie czciej.
Swego czasu autor ksiki uy czystego C do stworzenia interfejsu GDI dla 16-bitowych
kontrolek VBX. Nadesza era obiektw OLE i powstaa presja, aby zmodyfikowa kod GDI
(i nie tylko GDI) tak, aby korzysta z biblioteki MFC. W pewnym zakresie zmiany te zostay
dokonane. Po jakim czasie pojawia si biblioteka ATL i kolejna potrzeba modyfikacji kodu.
W wikszoci przypadkw powrcono wwczas do 16-bitowego kodu w C i poddano go konwersji. Kod ten by prostszy i atwiejszy w zastosowaniu ni kod wykorzystujcy MFC. W tej
postaci prawdopodobnie ju pozostanie, gdy nie przewiduje si jego kolejnej modyfikacji
w zwizku z pojawieniem si nowej technologii (.NET).

Uwaga
Termin .NET odnosi si do najnowszego rodowiska programistycznego firmy Microsoft.
Programy stworzone za pomoc tego systemu uruchamiane s we wsplnym rodowisku
uruchomieniowym CLR (Common Language Runtime). Wszystkie funkcje udostpniane
przez platform systemow zostay zawarte w bibliotekach klas utworzonych w dostpnych
jzykach (zwykle jest to C#, VB.NET lub C++), ktre wykorzystuj CLR.
Oczywicie postpujc w ten sposb, traci si moliwo uruchomienia kodu na wielu platformach. Co moe istotniejsze, rezygnuje si rwnie z zalet, jakie zapewnia mechanizm kodu
zarzdzanego (managed code) w technologii .NET. Naley wic rozway, czy korzyci, jakie
daoby zastosowanie najnowszych technologii, zrekompensuj koszt modyfikacji kodu.
Dziki rodowisku CLR programici maj z pewnoci wicej moliwoci programowania
wieloplatformowego, lecz nie naley chyba oczekiwa boomu wieloplatformowych aplikacji.
Programici bd prawdopodobnie nadal tworzy kod specyficzny dla konkretnej platformy
uruchomieniowej, aby mc w peni wykorzysta jej moliwoci. Tak wic wspomniane wyej
fragmenty kodu w C, skadajce si na kod rdowy 32-bitowych komponentw, pozostan
chyba bezpieczne.
Dziki Internetowi nastpi jednak zwrot w kwestii wieloplatformowoci. Wikszo kodu
aplikacji internetowych wykonywana jest bowiem przez przegldarki, ktre zapewniaj (lub
przynajmniej powinny zapewnia) niezaleno od platformy systemowej. Cz kodu znajdujca si natomiast po stronie serwera (odpowiedzialna za dostarczanie interfejsu aplikacji do
przegldarek uytkownikw) nie musi by przecie niezalena od platformy. Uruchamiana
jest bowiem na wydzielonym serwerze pod kontrol systemu NT, UNIX lub jego pochodnych.
Aplikacja stworzona dla konkretnej platformy systemowej generuje uniwersalny kod HTML
(w idealnym przypadku).
W praktyce, oczywicie, rzadko ograniczamy si do zwykego jzyka HTML. W celu uzyskania podanego efektu sigamy po jzyk DHTML, skrypty czy te wykorzystujemy obiekty
sterujce po stronie klienta. W wielu przypadkach ograniczamy w ten sposb liczb typw
przegldarek, ktre potrafi obsuy nasz witryn i zaoferowa uytkownikowi wszystkie jej
funkcje i moliwoci. atwo si w tej sieci zaplta.

Rozdzia 1. G Najpierw troch historii

19

Znajdujemy si na etapie ewolucji i rwnoczenie w trakcie rewolucji. Dynamicznie rozwijaj


si technologie internetowe, a jednoczenie wci jest duo do zrobienia w WIN32. Tam bowiem s korzenie wikszoci z nas i z pewnoci technologia ta nie straci szybko na znaczeniu.

Historia Visual Basica i C++


Historia tych dwch jzykw siga zamierzchych czasw; zamierzchych w odniesieniu do
stosunkowo krtkiej historii komputerw. Pocztkw VB, jak i C++, upatrywa naley w rodowisku DOS (dowiadczenie autora ksiki zwizane z programowaniem w systemie DOS
dotyczy gwnie jzyka Basic; w jego dorobku jest niewiele programw stworzonych w C i przeznaczonych dla tego systemu).
Linia graniczna midzy tymi jzykami zostaa wytyczona wanie w epoce DOS-a. Jzyk C
uchodzi wwczas za narzdzie profesjonalistw, natomiast Basic traktowano jak zabawk dla
dzieci. Opini t Basic zawdzicza w znacznej mierze jednej z jego interpretowanych wersji,
GWBasic, ktra w owych czasach zyskaa znaczn popularno. Przezywano go Gee Wiz1 Basic,
co charakteryzuje go cakiem dobrze. Od tamtego czasu Basic toczy mozoln walk o zdobycie
uznania w oczach programistw.
Po pojawieniu si systemu Windows programici C znowu mogli si czu jak u siebie w domu.
Do tego systemu programici Basica nie mieli bowiem dostpu. Do czasu, gdy na aren wkroczy Visual Basic.

rodowisko 16-bitowe
Nasz histori musimy rozpocz od systemw 16-bitowych, poniewa pocztki Visual Basica zwizane s wanie z takim rodowiskiem. Trzy pierwsze edycje VB przeznaczone byy
dla wersji 16-bitowych. Dopiero Visual Basic 4 by wersj 32-bitow.

Grom, czyli Visual Basic 1


Thunder2 (kryptonim projektu Visual Basic 1) oznacza duy krok naprzd. Paday wwczas
komentarze, e to tylko chwilowa moda, zabawka i tym podobne. Okazao si, e narzdzie to nie
byo ani przejciow mod, ani tym bardziej bahostk. Autor ksiki pracowa wwczas w firmie
MicroHelp, ktra stworzya kilka z pierwszych bibliotek dla Visual Basica. To bya wwczas absolutna nowo; wiele osb mylao, e to wanie my scalilimy narzdzia w pasek narzdziowy!
Pierwsza wersja VB miaa jeszcze wiele ogranicze kompilacja wycznie do pseudokodu,
ograniczony zestaw narzdzi, zapis formularzy tylko w formacie binarnym, brak moliwoci rozbudowy o dodatkowe moduy czy funkcje. Lecz bardzo wany pierwszy krok zosta wykonany.
1
2

Zwrot gee wiz (wac. gee whiz) w potocznej angielszczynie (USA) wyraa zaskoczenie lub entuzjazm,
w wolnym tumaczeniu odpowiadaj mu polskie: ojej!, rety! przyp. tum.
Z angielskiego: grzmot, grom przyp. tum.

20

Visual C++ dla programujcych w Visual Basicu

Narodzia si bowiem koncepcja niestandardowych kontrolek (custom controls). Byy to pocztki programowania opartego na komponentach, w formie jak znamy obecnie.
W pierwszym zestawie firmy MicroHelp znalazo si kilka ciekawych i popularnych kontrolek.
Jednym z nich byo pole listy z moliwoci wielokrotnego wyboru, podczas gdy pierwsze
pole listy Visual Basica pozwalao na zaznaczenie tylko jednego elementu. Zestaw suwakw
cechowa si cig reakcj, natomiast oryginalne suwaki Visual Basica aktualizoway swoj
warto dopiero po zwolnieniu przycisku myszy. Jak te czasy si zmieniaj...
Idea programowania opartego na komponentach zapocztkowaa rozwj najwikszego rynku
dodatkw do kompilatorw, jaka kiedykolwiek istniaa.
Oprcz komponentw, w Visual Basicu 1 programici Basica zetknli si po raz pierwszy z ide
programowania przez zdarzenia (ang. event-driven programming). Do tej pory nie mieli raczej
takiej okazji, chyba e kto zajmowa si konstrukcj oprogramowania jzyka C/SDK.
Dla programistw przechodzcych z systemu DOS do Windows programowanie przez zdarzenia
byo zupen nowoci. I wanie dziki VB liczba przesiadajcych si na system Windows
bya pokana. Ni std, ni zowd programici, ktrzy do tej pory nie marzyli nawet o programowaniu w Windows, otrzymali tak szans i wielu z niej skorzystao. To dopiero rewolucja.
Pierwszymi komponentami byy obiekty VBX. Mimo e w porwnaniu do dzisiejszych komponentw byy nieco prymitywne, miay wiele zalet. Ich tworzenie przebiegao stosunkowo prosto.
Posiaday dane egzemplarza oraz dane wspdzielone. Byy pierwszymi elementami programowania, dla ktrych mona byo definiowa niestandardowe waciwoci i zdarzenia. Obiekty
VBX miay posta 16-bitowej biblioteki DLL wraz ze wszystkimi jej zaletami i wadami.
W rodowisku 32-bitowym biblioteki DLL umieszczane s w przestrzeni pamici programu
wykonywalnego. Biblioteki 16-bitowe adowane byy natomiast do pamici tylko przy pierwszym
wywoaniu. Co prawda zachodziy przy tym komplikacje z segmentem danych oraz stosem,
lecz waciwo ta miaa rwnie swoje zalety. Dziki niej 16-bitowe biblioteki DLL mogy
suy do realizacji szybkiej komunikacji midzyprocesowej. Mona byo bowiem wykorzysta fakt, e w pamici obecny jest tylko jeden egzemplarz biblioteki i wsplna dla programw przestrze danych, i odpowiednio dostosowa swj kod.
Okazuje si, e to wanie 16-bitowe biblioteki DLL byy najblisze pierwotnej koncepcji biblioteki doczanej dynamicznie. Przewodni ide, jaka przywiecaa jej twrcom, bya
oszczdno miejsca, zarwno w pamici, jak i na dysku. Z biegiem czasu mielimy do czynienia ze staym wzrostem poziomu zoonoci obsugi bibliotek DLL (niezalenie od tego,
czy nazywano je obiektami VBX, OCX, COM czy jeszcze inaczej). Obecnie inicjatywa firmy
Microsoft w postaci technologii .NET zdaje si by zwrotem ku czasom, kiedy biblioteki nie
byy rejestrowane, lecz umieszczane razem z plikami EXE.
Pod hasem rozwizywania problemu okrelanego mianem DLL Hell (Pieko DLL)
wprowadzano coraz to nowe innowacje, ktre pogbiay zoono mechanizmu DLL, a ktrych
wikszo bya zupenie niepotrzebna. Aby rozwiza ten problem, naleao przede wszystkim
instalowa prywatne biblioteki DLL we wsplnym katalogu z programem, ktry z nich korzysta. W przypadku rodowiska 16-bitowego nie rozwizao to jednak problemu pieka DLL,
gdy tylko jedna kopia biblioteki DLL moga znajdowa si w danej chwili w pamici. W efekcie
mielimy do czynienia z czstym zjawiskiem zawieszania si programw w obecnoci innych
dziaajcych aplikacji.

Rozdzia 1. G Najpierw troch historii

21

Rozwamy nastpujcy przykad: 16 bitowy program aduje bibliotek DLL wymagan przez
inn aplikacj. Moe to by wczeniejsza wersja biblioteki, ktra nie jest zgodna z tym drugim
programem. Jeli teraz uruchomiony zostanie program korzystajcy z nowszej wersji biblioteki,
w pamici obecna bdzie jej starsza, niewaciwa wersja zaadowana przez pierwsz aplikacj.
Problem ten nie dotyczy programw 32-bitowych, poniewa w ich przypadku biblioteki DLL
umieszczane s w przestrzeni kodu danego programu, mog wic ze sob wspistnie. Warunek jest tylko jeden musz zosta zapisanie na dysku w sposb gwarantujcy zaadowanie
odpowiedniej wersji biblioteki.
W rodowisku 32-bitowym umieszczenie biblioteki wraz z plikiem EXE daoby wic pozytywny
rezultat. Rne wersje bibliotek DLL mog bowiem zosta umieszczone w pamici i nie
przeszkadza sobie nawzajem. Wprowadzenie rejestru wraz z ca jego zoonoci i kopotami stanowio wic rozwizanie problemu, ktry ju nie istnia.
Lecz zanim przesidziemy si na platform 32-bitow, musimy jeszcze pozna kilka faktw
zwizanych z platform 16-bitow.

Visual Basic 2
Ulepszenia dokonane w drugiej wersji VB nie byy co prawda znaczne, lecz wprowadzona zostaa midzy innymi wyjtkowa moliwo amania obiektw sterujcych. Opisany wyej
problem pieka DLL coraz bardziej dawa si programistom we znaki. Prawdopodobnie to
wanie wtedy w firmie Microsoft zdecydowano, e wszystkie informacje naley przenie do
rejestru, a na dysku pozostanie tylko jedna kopia kadej biblioteki DLL umieszczona w katalogu systemowym. Sprawy przybray zy obrt.
Jako zalet Visual Basica 2 mona wskaza moliwo uycia kolorw w trybie high-color
w obrbie kontrolek. Wwczas okrelano to mianem obsugi trybu 256-kolorowego, lecz najwaniejszy by sposb obsugi palety dla kontrolki zawierajcej obraz. Oczywicie, zapewniaa
ona operacje na wikszej liczbie kolorw ni 256. Nadal mona byo jednak korzysta wycznie z bitmap, ikon oraz metaplikw. Sytuacja ta nieprdko miaa si zmieni.
Inn nowoci VB 2 byy kontrolki w wersji light (light controls). Wszystkie komunikaty
przeznaczone dla tych kontrolek docieray do nich za porednictwem formularza lub innego
obiektu, na ktrym owa lekka kontrolka zosta umieszczony. Poniewa kontrolki te nie posiaday uchwytu okna, zarzdzanie nimi byo nieco skomplikowane.
Wraz z jzykiem Visual Basic 2 pojawia si funkcja VBFormat, dostpna z poziomu kodu C
w obrbie obiektu VBX. Umoliwia ona formatowanie acuchw za pomoc procedur Visual
Basica. Cecha ta przydawaa si w przypadku wielu kontrolek, lecz jej dziaanie byo ograniczone
wycznie do Visual Basica.
Powrmy teraz do zmian, ktre day moliwo amania kontrolek. W przypadku gdy nasza
kontrolka korzystaa z funkcji Visual Basica 2, musiaa sprawdza wersj VB i ogranicza
w jaki sposb swoje moliwoci podczas pracy w Visual Basicu 1. Wydaje si to cakiem
oczywiste, lecz w zalenoci od funkcji danego obiektu nie zawsze takim byo.

22

Visual C++ dla programujcych w Visual Basicu

Ponadto niektre waciwoci kontrolki mog by zwizane z funkcjami dostpnymi wycznie w VB 2. Problem pojawi si moe kilka miesicy po utworzeniu kontrolki, gdy zechcemy
doda do niego jak waciwo, ktra dziaa powinna w kadej wersji VB. Na drodze staj
wwczas waciwoci obsugiwane wycznie przez Visual Basic 2. W VB 1 naley zastpi
te waciwoci ich atrapami, aby umoliwi dziaanie kontrolki.

Visual C++ 1
Kontrolki dla Visual Basica 1 oraz 2 byy tworzone za pomoc DOS-owego edytora i DOSowego kompilatora C++ (przynajmniej tak postpowa autor niniejszej ksiki). Kompilowane
byy z linii polece i testowane przy uyciu programu CodeView. Wszystko ulego zmianie
wraz z pojawieniem si Visual C++ 1.5.
Warto przede wszystkim wspomnie o Visual C++1.52, ktry obsugiwa (chocia obsuga ta
bya bardzo skromna) niestandardowe kontrolki, poniewa ma to zwizek z nasz dyskusj na
temat programowania komponentw. Trzeba rwnie wymieni t wersj tylko z tego wzgldu,
e dziki niej zostaa zachowana do dzi pierwotna specyfikacja niestandardowych kontrolek
Visual Basica w wersji 1.0. W skadzie aktualnego pakietu dystrybucyjnego MSDN jzyk
C++1.52 wystpuje jako obowizujca realizacja 16-bitowego C++.
Z biegiem lat programici powoli zapominali o tym, e pewne procedury nie byy zgodne z pierwsz wersj Visual Basica. Niby nie ma si czym przejmowa, gdy Visual Basic 1.0 dawno ju
przeszed do historii, prawda? Niezupenie! W chwili pojawienia si Visual Basica 2.0 wersja
1.0 bya nadal bardzo rozpowszechniona. Mniej wicej w tym samym czasie Microsoft podj
decyzj o rozszerzeniu jzyka C++ o obsug standardu VBX. Zadecydowano, e obsuga ta
bdzie zgodna ze specyfikacj Visual Basica 1.0. Kto mg wtedy przewidzie, e bdzie to
ostatnia 16-bitowa wersja Visual C++. Tym samym specyfikacja kontrolek Visual Basica 1.0
przetrwaa nadal w VC++ 1.52. Tak wic pierwsza edycja Visual C++ okazaa si jednoczenie
jego ostatni 16-bitow wersj.

Visual Basic 3
Wersja ta bya wiadectwem postpu w tej dziedzinie. Wyposaono j bowiem w mechanizm
obsugi bazy danych. W porwnaniu do moliwoci systemu SQL Server lub innego zaawansowanego mechanizmu bazy danych nie bya to waciwie pena obsuga, lecz mimo to wielu
programistw z niej korzystao.
Innowacj w zakresie niestandardowych kontrolek byo pojawienie si po raz pierwszy moliwoci
wizania danych (data binding). Mechanizm ten by jednak stosunkowo prymitywny i nie wykorzystywano go w powanych projektach realizowanych w jzyku Visual Basic 3.
Wikszo osb programujcych w Visual Basic 3 nadal korzystaa ze znacznego wsparcia
w postaci narzdzi dostarczanych przez niezalene firmy. Przykadowo w 16-bitowej wersji
programu UnInstaller firmy MicroHelp zastosowano 13 niestandardowych kontrolek VBX
oraz kilka bibliotek DLL stworzonych w jzyku C. W przypadku wersji 32-bitowej sytuacja
bya cakiem inna, poniewa 32-bitowe rodowisko programistyczne oferowao znacznie wicej
standardowych narzdzi.

Rozdzia 1. G Najpierw troch historii

23

W opinii autora ksiki Visual Basic 3 jest najlepsz 16-bitow wersj tego jzyka. Jeli istnieje potrzeba stworzenia kodu 16-bitowego, to naley skorzysta wanie z tej wersji Visual
Basica. Do czasu pojawienia si Windows 2000 kod stworzony za jego pomoc spisywa si
nawet lepiej na wielu platformach (WIN9X/NT) ni niejeden 32-bitowy. Zawdziczano to
cakiem niezej emulacji rodowiska 16-bitowego, jak oferowa Windows NT, oraz istnieniu
do powanych rozbienoci pomidzy WIN9X a NT po stronie 32-bitowej, ktre byy przyczyn problemw ze zgodnoci w przypadku programw 32-bitowych.

Visual Basic 4
W zakresie programowania 16-bitowego Visual Basic 4 okaza si porak. Dodano wprawdzie obsug 16-bitowego standardu OLE, ale waciwie nie wiadomo, po co Microsoft zada
sobie cay ten trud. W owym czasie Microsoft opuszcza ju platform 16-bitow, wic 16bitowy Visual Basic 4, a szczeglnie jego dodatkowe narzdzia, nigdy nie zostay dokadnie
przetestowane.
Tak wic czwarta wersja VB nigdy nie staa si powanym narzdziem programistycznym dla
rodowiska 16-bitowego. Z powodu przerobienia kodu i zastosowania mechanizmu OLE, w wielu
przypadkach okazywaa si wolniejsza w porwnaniu do analogicznego kodu stworzonego
w Visual Basicu 3.
Visual Basic 4 w wersji 16-bitowej obsugiwa standard VBX. Obsugiwa rwnie 16-bitowe
kontrolki OLE (OLE Controls), czyli kontrolki OCX. Technologia ta narodzia si i nadal
umiera wraz z VB4-16. Specyfikacja VBX nie zostaa poddana modyfikacji w jzyku Visual Basic 4, wic ostatnia jej wersja dotyczy Visual Basica 3.
Z uwagi na fakt, e jest to najbardziej aktualna wersja 16-bitowego jzyka Visual Basic,
obowizujcymi do dzi standardami dla rodowiska 16-bitowego s: specyfikacja VBX z Visual
Basica 3 oraz specyfikacja 16-bitowych obiektw OCX z VB4. Tak wic jedyn 16-bitow
specyfikacj kontrolek Visual Basica, ktra zostaa cakowicie wycofana, jest wersja 2 standardu
VBX. Wszystkie pozostae przetrway do dzi VBX 1.0 w Visual C++ 1.52, VBX 3.0 oraz
16-bitowe OCX w Visual Basicu 4.

Visual Basic 4 pierwsze podejcie


Najwikszy nacisk w czwartej wersji Visual Basica pooono na oprogramowanie dziaajce
w rodowisku 32-bitowym. Oprogramowanie to sprawiao niestety sporo problemw, podobnie
jak obsuga 32-bitowych obiektw OCX. Mimo to naley uszanowa spory wysiek, jaki
podjto w zwizku z czwart wersj Visual Basica, ktra bya jedyn edycj tego jzyka zawierajc obie jego realizacje, 16- i 32-bitow.
Nie wiadomo waciwie, dlaczego Microsoft podj decyzj o uwzgldnieniu obydwu wersji
Visual Basica w jednej edycji. Byo to trudne przedsiwzicie zarwno dla samego Microsoftu,
jak i dla innych firm, producentw rnych dodatkw do Visual Basica. Pojawia si bowiem
konieczno tworzenia i testowania dwch wersji kadego produktu. Ucierpiay na tym przede
wszystkim wersje 16-bitowe, a i dla 32-bitowych nie bya to sytuacja korzystna.

24

Visual C++ dla programujcych w Visual Basicu

Microsoft jasno da do zrozumienia, e cieka dalszego rozwoju zwizana bdzie ze rodowiskiem 32-bitowym. Dziwi zatem fakt, e firma w ogle wzia pod uwag 16-bitow wersj tego
kompilatora. Visual Basic 3 by 16-bitowym rodowiskiem o cakiem sporych moliwociach.
Tylko nieliczne zadania wymagay uycia Visual Basica 4-16, gdy nie mona ich byo zrealizowa w VB 3. Jedynie w takich przypadkach warto byo sign po Visual Basica 4.
Jedn z takich nowoci by mechanizm automatyzacji OLE (OLE automation). Visual Basic 3 nie
posiada wbudowanej obsugi tej technologii. Jeli wymagane byo stworzenie 16-bitowego
serwera automatyzacji OLE, pomocny okazywa si VB 4. Jednym z zastosowa 16-bitowej
automatyzacji mogo by stworzenie swego rodzaju thunkera (thunking to metoda umoliwiajca wywoywanie procedur z 16-bitowych bibliotek DLL z poziomu 32-bitowego kodu3).
System nie dokonywa bowiem sprawdzenia, czy serwer automatyzacji OLE jest 16- czy 32bitowy, nie byo wic przeszkd do wykorzystania 16-bitowego serwera automatyzacji OLE
z poziomu programu 32-bitowego.
Mechanizm automatyzacji OLE Visual Basica 4 dawa zatem moliwo uycia 16-bitowego
kodu z poziomu 32-bitowego programu. Nie by to oczywicie najszybszy sposb wywoywania
procedur, wic w miar moliwoci lepiej byo stosowa prawdziwy thunking. Thunking jest
jednak silnie zaleny od platformy systemowej, natomiast automatyzacja OLE przeciwnie.
Mona oczywicie podawa powody, dla ktrych warto byo uy Visual Bascia 4-16, lecz
realna konieczno pojawiaa si bardzo rzadko, a sama platforma sprawiaa zbyt duo problemw. Nie warto byo si zatem przesiada na VB4-16 bez wyranego powodu. Znacznie
lepszym rozwizaniem dla programisty bya bezporednia migracja do wiata 32 bitw.

rodowisko 32-bitowe
rodowisko programowania WIN32 jest dzi miejscem pracy dla wikszoci z nas. Pozostao
niewiele zada realizowanych z wykorzystaniem 16-bitowych technologii jzyka Visual Basic.

Visual Basic 4
Jak ju wczeniej wspomniano, w czwartej wersji Visual Basica najwikszy nacisk pooono
na oprogramowanie dziaajce w rodowisku 32-bitowym. Ten kompilator nie by niczym
niezwykym w porwnaniu do postpw dokonanych w wersji 3.
Visual Basic 4 by pierwsz prb przeniesienia tego jzyka na platform 32-bitow. Kompilator
ten oferowa ponadto niewiele funkcji, aby warto byo z niego korzysta. Nadal by jedynie
kompilatorem pseudokodu.

Visual Basic 5 Visual Studio 5


W postaci pitej wersji Visual Basica programici otrzymali bardzo solidne narzdzie. Moliwo kompilacji do kodu macierzystego oraz spory zestaw narzdzi uzupeniajcych, dziki
3

I odwrotnie procedur 32-bitowych z poziomu 16-bitowego kodu przyp. tum.

Rozdzia 1. G Najpierw troch historii

25

ktremu w wikszoci przypadkw dodatkowe zakupy nie byy konieczne, skaday si na


kompletny system programowania. Po raz pierwszy w jzyku Visual Basic pojawia si moliwo tworzenia kontrolek ActiveX.
Trudno zrozumie, dlaczego moliwo tworzenia formantw ActiveX w Visual Basicu nigdy
nie bya wykorzystywana na szersz skal. To przecie wspaniay sposb na hermetyzacj kodu,
zarwno w przypadku pracy nad komercyjnym projektem, jak i przy projektach wewntrznych. Od momentu pojawienia si Visual Basica 5 tworzenie niestandardowych formantw
stanowio nieodczny element prac we wszystkich istotnych projektach realizowanych przez
autora ksiki. By moe dopiero technologia .NET sprawi, e tworzenie formantw stanie si
popularn praktyk.
Wraz z wprowadzeniem jzyka Visual Basic 5 firma Microsoft umiecia kilka produktw
programistycznych w jednym pakiecie. Pakiet Visual Studio 5 by pierwszym systemem oferujcym kompletne rozwizanie, wcznie z kompilatorem C++. W ten sposb kompilator
C++ trafi pod strzechy. Pierwszym 32-bitowym kompilatorem C++ by Visual C++ 2.0, ale
dopiero wersja 4.0 bya czciej uywana przez autora ksiki. Z numeracji kolejnych wersji
jzyka od 2.0 do 5.0 wynika, e w rodowisku 32-bitowym borykano si z pewnymi pocztkowymi kopotami. Wersja oznaczona numerem 5 bya pierwsz, ktra wesza w skad
nowego zestawu Visual Studio.
Skoro wic podarowano nam wspaniae narzdzie w postaci C++, to dlaczego go nie wykorzysta? Rodziy si przerne pomysy stosowania kompilatora lub rodowiska programistycznego Visual C++ 5 od tych prostych po bardziej zaawansowaane.
Jednym z delikatnych sposobw wykorzystania rodowiska Visual C++ byo uycie takich
funkcji, jak Find in Files (wyszukiwanie sw lub fraz w plikach). Dla samej tej funkcji warto
byo uruchomi edytor Visual C++ 5. Realizuje ona wyszukiwanie okrelonych acuchw tekstowych w plikach. Mona ogranicza zakres poszukiwa do plikw okrelonego typu. Podczas
wyszukiwania przegldane s rwnie podkatalogi. Po jego zakoczeniu wywietlana jest lista
wierszy z plikw, ktre odpowiadaj wzorcowi. Dwukrotne kliknicie pozycji na licie powoduje zaadowanie pliku do edytora i ustawienie kursora w miejscu wystpienia szukanego tekstu.
Moliwo rejestracji makropolece w edytorze do celw zaawansowanej edycji wystpuje
dopiero w najnowszej wersji Visual Basica. W Visual C++ mona nawet uruchamia i testowa
programy napisane za pomoc Visual Basica, jeli tylko zostay skompilowane z odpowiednimi ustawieniami.
Bardziej zaawansowane metody wykorzystania C oraz C++ s tematem tej ksiki. Visual
Studio 5 jest pierwszym systemem, dziki ktremu wszystkie przedstawione tu pomysy mona realizowa w praktyce, bowiem wraz z t wersj programici po raz pierwszy otrzymali
wszelkie niezbdne kompilatory. Oczywicie wikszo programistw Visual Basica nadal nie
uywa samego kompilatora C++.

Visual Studio 6
W Visual Basicu 6 wzbogacono moliwoci dostpu do danych. Dodano rwnie nowe kontrolki oraz narzdzia w formie kreatorw. Jednake rodowisko programistyczne nie ulego
zasadniczej zmianie w porwnaniu do jego pitej wersji.

26

Visual C++ dla programujcych w Visual Basicu

W Visual Basicu 6 pojawia si funkcja raportowania. Trzeba przyzna, e nie bya to rewelacja,
o czym wiadczy chociaby fakt, e sam Microsoft w technologii .NET powrci do narzdzi
firmy Crystal4. Cakiem udan nowoci byo natomiast wprowadzenie struktury hierarchicznej
do zestawu rekordw oraz komponentu FlexGrid. Hierarchiczne zestawy rekordw zdobyy
wielu zwolennikw.
Inn przydatn innowacj bya moliwo tworzenia rde danych. Rozczone zestawy rekordw oraz moliwo przekazywania zestawu rekordw w wywoaniu procedury, nawet
pomidzy procesami, oznaczay wyrany postp. Umoliwiao to prost konstrukcj wielowarstwowego kodu (multi-tier code).
Z punktu widzenia autora tej ksiki najbardziej poyteczn zmian w Visual Studio 6 byo
pojawienie si trzeciej wersji biblioteki ATL. Od tej pory tworzenie kontrolek w tej technologii
stao si praktyczniejsze i atwiejsze w porwnaniu do wczeniejszych wersji ATL.
Mona by jeszcze wymieni kilka zmian, jakie dokonane zostay w Visual Studio 6, lecz adna
z nich z pewnoci nie okazaa si rewelacj. Po rekompilacji projektu stworzonego w Visual
Basicu 5 nie czekao nas nic szczeglnego. Ot, zwyka codzienno.

.NET
Najnowsza technologia pochodzca z firmy Microsoft burzy dotychczasowe reguy. Jedynie
jzyk Visual C/C++ funkcjonuje zasadniczo tak jak dawniej. Nie ma ju ani Visual J++, ani
Visual Interdev, a Visual Basic zosta oparty na modelu klas (tak jak wszystkie jzyki .NET).
To nie jest ju stary, poczciwy Visual Basic, znany nam do tej pory. Wymagany jest poziom
zaawansowania, jakiego VB nigdy dotd nie wymaga. Konieczne jest rwnie dostosowanie
lub wrcz ponowne napisanie wikszoci fragmentw kodu w celu uruchomienia ich na nowej
platformie.
Gdy Microsoft poinformowa, e Visual Basic korzysta bdzie z mechanizmu dziedziczenia
implementacji, wydawao si, e bdzie to opcjonalna moliwo (podobnie jak w Visual C++).
Mona przecie programowa zarwno w C, jak i w C++. Nic podobnego. Jzyki .NET oparte
zostay na klasach i jest to jedyna akceptowana metoda programowania.
Podobnie jest z jzykiem C#. Migracja ze rodowiska Visual Basic 6 do Visual Basic .NET moe by rwnie trudna, co bezporednie przejcie na jzyk C#. Wielce prawdopodobne jest, e wielu
programistw wanie tak postpi przesidzie si wprost na jzyk C#.
Jeli podnosimy kwesti programowania w jzykach, ktre korzystaj ze wsplnego rodowiska
uruchomieniowego CLR (Common Runtime Language), to poruszamy zagadnienie tworzenia
kodu zarzdzanego oraz kodu niezarzdzanego. Kod zarzdzany (managed code) dziaa pod
kontrol rodowiska CLR; nosi tak nazw, poniewa rodowisko zwalnia programist z obowizku odmiecania (ang. garbage) pamici z niepotrzebnych obiektw i wykonuje za niego
ca niewdziczn prac. Kod niezarzdzany natomiast to klasyczny kod wykonywany poza
4

Przypis: Crystal Reports jest obecnie najczciej uywanym narzdziem do tworzenia raportw, wiecej
mona znale na stronie http://www.crystaldecisions.com/

Rozdzia 1. G Najpierw troch historii

27

rodowiskiem CLR. W jzykach C oraz C++ tworzy mona kod niezarzdzany (chocia dostpne s rozszerzenia do C++ umoliwiajce tworzenie kodu dla CLR), natomiast w Visual
Basicu oraz w C#, ktre korzystaj z nowej technologii, tworzony jest kod zarzdzany.

Znaczenie jzyka Visual Basic


Jzyk Visual Basic zrewolucjonizowa metody tworzenia programw dla systemu Windows.
atwo konstruowania interfejsu uytkownika oraz prostota programowania nie maj sobie
rwnych wrd dostpnych narzdzi, by moe z wyjtkiem tworzenia kodu zarzdzanego
w technologii .NET. Visual Basic jest niewtpliwie wspaniaym rodowiskiem, mimo to nie
naley przecenia jego moliwoci. Wielu programistw popenia bd, prbujc w tym jzyku zrealizowa zadania, ktre nie s zgodne z jego przeznaczeniem. Najczciej efekt jest taki,
e powstaje kod skomplikowany, trudny zarwno w modyfikacji, jak i w testowaniu, a ponadto zwykle wystpuj rwnie problemy z jego stabilnoci.
Uycie waciwego narzdzia przynosi zwykle efekt w postaci lepszego rezultatu kocowego.
S zadania, w ktrych dobr narzdzia nie jest a tak istotny, w przypadku innych za to kwestia
kluczowa. Nie naley unika zastosowania jzyka C czy C++, jeli sytuacja tego wymaga.
Celem tej ksiki jest wanie zapoznanie i oswojenie czytelnika z tymi narzdziami.

Mocne strony Visual Basica


Mechanizm kodu zarzdzanego w systemie .NET wyrwna moliwoci wielu jzykw. W celu
porwnania cech poszczeglnych narzdzi naley cznie potraktowa wikszo jzykw
opartych na kodzie zarzdzanym. Pod wzgldem oferowanych moliwoci jzyk C#, na przykad,
jest bliszy jzykowi Visual Basic ni C++. rodowisko projektowe .NET wywodzi si z poprzednich wersji Visual Basica.

Bezapelacyjnie najlepsze narzdzie do projektowania interfejsu


Visual Basic jest prawdopodobnie najpotniejszym narzdziem programistycznym typu RAD
dla WIN32. Programici zawsze chtnie po nie sigali z tej prostej przyczyny, e stworzenie
w nim interfejsu zajmuje zaledwie kilka minut. Dziki technologii .NET moliwoci te stay si
dostpne rwnie dla wielu innych jzykw, lecz C oraz C++ pozostay nadal nie zmienione.

cisa kontrola typw


W jzyku Visual Basic od zawsze bya stosowana cisa kontrola typw zmiennych (strong
typing). Unika si w ten sposb potencjalnych bdw wynikajcych ze stosowania wskanikw
oraz kopotw zwizanych z rzutowaniem typw. Oba te mechanizmy nie s bowiem dostpne
w Visual Basicu.

28

Visual C++ dla programujcych w Visual Basicu

W Visual Basicu moliwa jest natomiast konwersja typw. Automatyczna konwersja typu
zmiennej przeprowadzana jest wszdzie tam, gdzie kompilator uzna to za waciwe. Poniewa mechanizm taki stanowi potencjalne rdo niezamierzonych bdw, lepiej jest dokonywa jawnej konwersji zmiennych. Nie naley myli zmiennych typu Variant oraz mechanizmu
konwersji typw z tzw. lun kontrol typw (loose typing), poniewa jedno z drugim nie ma
nic wsplnego. Zarwno dla zmiennych typu Variant, jak i dla konwersji typw zdefiniowany
jest cisy zbir zasad dotyczcych konwersji, natomiast w przypadku lunej kontroli typw
takie reguy nie istniej.

Interaktywne rodowisko uruchomieniowe


Interaktywne rodowisko w poczeniu z bogatymi moliwociami w zakresie projektowania interfejsu to wanie Visual Basic, jaki znamy. Wielu programistw wybiera to narzdzie ze wzgldu
na moliwo tworzenia, uruchamiania, testowania oraz modyfikowania kodu na gorco, bez
koniecznoci opuszczania rodowiska. Pod tym wzgldem VB nie ma sobie rwnych.

Wsparcie ze strony producentw narzdzi


Programici Visual Basica zawsze mogli liczy na silne wsparcie ze strony niezalenych firm.
Liczba tych dostawcw wzrosa z 8 10 na samym pocztku do setek w chwili obecnej.
Oferta wszelkiego rodzaju dodatkw przeznaczonych dla Visual Basica jest niezwykle bogata,
a trend ten utrzyma si rwnie w przypadku platformy .NET.
Wszystko to znacznie uatwia i usprawnia prac programisty VB. Otrzymuje bowiem starannie napisane i przetestowane narzdzia, stworzone w jzyku C przez specjalistw z danej
dziedziny.

Saboci jzyka Visual Basic


Mimo e Visual Basic jest wspaniaym narzdziem typu RAD, wanie to ukierunkowanie
czyni go nieodpowiednim dla niektrych zada. Programici pac pewn cen za pomoc jzyka
VB. Z jednej strony mamy bowiem atwiejsz i wydajniejsz prac, z drugiej za utrudniony
dostp do warstwy systemowej. Wskazanie sabych punktw Visual Basica i nauczenie czytelnika, w jaki sposb ma wypenia te luki poprzez zastosowanie jzykw C/C++, stanowi cel
tej ksiki.

Szybko i wydajno
Stale podejmuje si temat szybkoci kodu Basica. Jzyk ten nigdy nie pozby si etykiety zabawki, ktr przypito mu z powodu interpretowanego Basica, dziaajcego na oryginalnym
komputerze PC pod kontrol systemu DOS. Pierwsze wersje VB rzeczywicie potwierdzay
opini o maej szybkoci Basica. Swoje wolniejsze dziaanie Visual Basic zawdzicza tzw.
pseudokodowi (P-code), na ktry tumaczone byy programy (zamiast tego powinny zosta
poddane kompilacji do postaci wykonywalnej).

Rozdzia 1. G Najpierw troch historii

29

Poczwszy od wersji 5 mamy ju moliwo penej kompilacji programw. W wersjach 5 oraz 6


zastosowano waciwie ten sam kompilator co w Visual C. Szybko wykonywania bya wic
nareszcie porwnywalna. Pozostay jedynie rnice wynikajce z realizacji pewnych funkcji
w bibliotece uruchomieniowej Visual Basica. Niektre z tych funkcji byy nadal dosy powolne,
na przykad operacje na acuchach tekstowych.
Jednym z najbardziej niewydajnych rozwiza, ktre pojawio si po raz pierwszy w czwartej
wersji VB, byo zastosowanie acuchw w formacie Unicode. Od tej pory w Visual Basicu
operacje wykonywane s bowiem wewntrznie na acuchach Unicode, lecz ze wzgldu na
konieczno wsppracy z systemami opartymi na zestawie znakw ANSI Microsoft postanowi
konwertowa acuchy na zestaw ANSI przy wszystkich odwoaniach do API. Odwrotna
konwersja wykonywana jest oczywicie podczas powrotu z danej funkcji API.
Wraz z technologi .NET Microsoft powraca do koncepcji tzw. kodu poredniego IL (Intermediary Language). Tym razem firma Microsoft dooya stara, aby kompilator JIT (Just In Time)
jzyka IL dziaa wydajnie. Jeli istnieje jednak potrzeba kompilacji do kodu maszynowego, to
tak operacje mona zleci kompilatorowi JIT podczas instalacji projektu.

cisa kontrola typw


Jak ju wspomniano, w jzyku Visual Basic od zawsze bya stosowana cisa kontrola typw
zmiennych, ktra wraz z brakiem wskanikw sprawia, e trudno jest w tym jzyku znale
eleganckie rozwizanie pewnego problemu. Polega on na tym, e typ danych nie jest znany do
czasu uruchomienia programu. Klasycznym przykadem takiej sytuacji jest funkcja API 
 , ktrej parametr
moe by zmienn niemale kadego typu, tj. wskanikiem do danych dowolnego typu (wcznie ze strukturami i danymi acuchowymi), wartoci typu 
lub
 bezporednio lub kombinacj wartoci, np. wartociami typu  .
Ten typ danych wystpuje do czsto w systemach komunikatw, w ktrych musz by obsugiwane dane rnego typu. A zatem mechanizm cisej kontroli typw ma rwnie ujemne strony.
W jzyku Visual Basic dostpny jest co prawda typ Variant, nie narusza on jednak zasady cisej
kontroli typw. Wewntrznie zmienna typu Variant moe zawiera dane rnego typu, lecz na
zewntrz jest tylko zmienn typu Variant i wszystkie odwoania do niej musz by rwnie
typu Variant. Zmienna typu Variant nie zrozumie ani acucha jzyka C, ani tym bardziej
typu zdefiniowanego przez uytkownika. Obydwa typy s czsto stosowane wraz z omawian
wyej funkcj  .

Przechowywanie wartoci waciwoci obiektw poza kodem programu


Projektowanie interfejsu to w Visual Basicu prawdziwa przyjemno. Mona mie jednak zastrzeenia co do sposobu przechowywania wartoci waciwoci kontrolek oraz odnonie do
ograniczenia moliwoci modyfikowania waciwoci wielu obiektw do etapu projektowania.
Wartoci waciwoci obiektw s zapisywane do pliku formularza (.frm), a dane binarne do pliku
.frx. Nie sposb zwykle okreli, kiedy waciwoci zostaj zmodyfikowane i rni si od wartoci domylnych. Utrudnia to testowanie programu w przypadku obiektw, ktrych waciwoci
byy zmieniane podczas projektowania. A takie postpowanie jest nieuniknione, poniewa

30

Visual C++ dla programujcych w Visual Basicu

w jzyku Visual Basic jest wiele kontrolek o waciwociach modyfikowalnych jedynie na


etapie projektowania. Skutecznie uniemoliwia to zastosowanie pewnego rodzaju obejcia,
polegajcego na umieszczeniu zmian waciwoci w kodzie podczas adowania formularza.
Jeli ustawienia waciwoci znajduj si wewntrz kodu programu, mamy moliwo ledzenia
zmian waciwoci. W rodowisku .NET dokonano zmian na lepsze. Nie ma ju mechanizmu
przechowywania waciwoci, ktry powodowaby zapisywanie ich w jakim specjalnym miejscu.
Ustawienia waciwoci umieszczane s bezporednio w kodzie programu, i tak jest chyba najlepiej.

Znaczenie jzyka C++


Jzyk C++ zawsze lepiej sprawdza si w zadaniach, ktre wymagay bliszego kontaktu
z systemem. Oczywicie przy jego uyciu wielokrotnie tworzono rwnie interfejs uytkownika, jednak ten obszar zastosowa nie jest mocn stron C++.
Analizujc tradycyjne zastosowania C++ w porwnaniu do Visual Basica, mona zauway
istotne rnice. Kod uytkowy powstawa zwykle w jzykach C oraz C++, natomiast za pomoc VB realizowano projekty typu RAD. Nawiasem mwic, sam Visual Basic zosta napisany w C++. Ponadto w jzyku tym powstaje wikszo kontrolek dla VB, dostarczanych
przez niezalene firmy. Wikszo aplikacji wchodzcych w skad pakietu Microsoft Office
rwnie stworzono w jzyku C/C++.
Chocia wikszo z nas nie uczestniczy w procesie tworzenia kodu uytkowego na tym poziomie, to zdajemy sobie spraw, e musiay istnie powody takiego wyboru. Jzyk C++ pozwala zwykle na stworzenie bardziej wydajnego kodu z tej prostej przyczyny, e oferuje wicej moliwoci w zakresie obsugi pamici oraz wsppracy z systemem. Szerokie moliwoci
optymalizacji oraz dostosowania kodu do konkretnego zadania pozwalaj na uzyskanie,
w zalenoci od wymaga, kodu bardziej efektywnego lub o mniejszych rozmiarach. Nawet
na platformie .NET mona napotka problemy, w przypadku ktrych wybr jzyka C/C++
okazuje si najlepszym, a czasem jedynym rozwizaniem.

Mocne strony C++


Visual C++ istotnie posiada pewne cechy, ktre czyni go najlepszym narzdziem do realizacji pewnych zada programistycznych. Pojawienie si technologii .NET zniwelowao
w pewnym stopniu przewag tego jzyka, jednak nadal pozostay obszary zastosowa, ktre
s domenami C/C++. Poniej wyszczeglnimy gwne zalety jzyka i omwimy ich zwizek z technologi .NET.

Dziedziczenie implementacji
Mechanizm dziedziczenia implementacji jest popularn strategi programistyczn, pozwalajc
na korzystanie ze wsplnych metod zaimplementowanych w klasie bazowej przez podklasy,

Rozdzia 1. G Najpierw troch historii

31

ktre si z niej wywodz. Dziki dziedziczeniu znacznie prociej jest ponownie wykorzysta
wasn prac.
Dziedziczenie implementacji zawsze dawao przewag Visual C nad Visual Basiciem. Przeom
nastpi wraz z wprowadzeniem technologii .NET, dziki ktrej programici Visual Basica po
raz pierwszy w historii otrzymali moliwo korzystania z dobrodziejstw tego mechanizmu.

Sabsza kontrola typw, moliwo rzutowania typw


Sabsza kontrola typw w C oraz C++ pozwala na rzutowanie typw. W jzykach tych istnieje
rwnie pojcie wskanikw do zmiennych. Te dwie cechy czyni jzyk C/C++ bardzo elastycznym, jeli chodzi o sposb operowania danymi przez kompilator. Jeli na przykad istnieje
potrzeba, aby warto typu
 staa si nagle wskanikiem do zmiennej acuchowej, to nie ma
nic prostszego wystarczy wykona operacj rzutowania typw i ju mamy acuch. Naley
przy tym oczywicie upewni si, czy dana warto bdzie prawidowym wskanikiem typu acuchowego, jednak teraz istotne jest to, e operacja taka jest w ogle dozwolona.
Opisane tu moliwoci sprawiaj, e jzyk C idealnie nadaje si do manipulowania danymi
w systemie rozpowszechniania komunikatw, jakim jest np. Windows. Niewane, czym
w rzeczywistoci jest dana warto
 liczy si to, e mona j bez trudu poprawnie
zrzutowa i e zostanie prawidowo potraktowana przez kompilator. Realizacja tej samej operacji w jzyku Visual Basic wymaga karkoomnych wyczynw, polegajcych najczciej na
kopiowaniu blokw pamici w miejsce zajmowane przez zmienn docelowego typu.

Moliwe jest prawie wszystko


Rnorodno operacji, ktre mona wykona w jzyku C++, czyni to narzdzie bardzo elastycznym. W C/C++ moliwe s operacje na wskanikach oraz bezporednio na pamici. Jzyk
ten dziaa na bliszym, w porwnaniu z VB, poziomie do API systemu Windows. Interfejs API
zaprojektowany zosta pod ktem programw tworzonych w jzyku C, a wic typy danych
oraz struktury idealnie pasuj do programw pisanych w C czy C++.
Jzyk C lub C++ jest rwnie odpowiednim narzdziem do tworzenia kodu niskopoziomowego,
takiego jak sterowniki oraz usugi systemowe.
aden inny jzyk nie moe si pochwali tak liczb przykadowych programw, jaka jest dostpna dla jzyka C/C++. Dla VB, oczywicie, rwnie istnieje mnstwo przykadw, jednak
s obszary, dla ktrych dostpne s liczne prbki w jzyku C, a ktre nie zostay nawet oprogramowane w jzyku Visual Basic.

Saboci jzyka C++


Te same cechy, ktre decyduj o zaletach jzykw C oraz C++, mog stanowi rwnie ich
saby punkt. Z faktu, e jzyk ten z natury jest jzykiem niszego poziomu i na tym poziomie
oferuje dostp do systemu, wynikaj nastpujce ograniczenia:

32

Visual C++ dla programujcych w Visual Basicu

G Waciwie nic nie jest proste to jest cena, ktr si paci za elastyczno jzyka.

W jzyku C/C++ programuje si znacznie trudniej w porwnaniu do Visual Basica.


Operacje na wskanikach oraz rzutowanie typw s, w najlepszym przypadku,
kopotliwe. Dziki wykorzystaniu klas uzyskujemy lepsz technik kodowania,
lecz jest ona trudniejsza do opanowania.
G Projektowanie interfejsu uytkownika jest, delikatnie mwic, mczce

w porwnaniu z VB tworzenie interfejsu uytkownika jest archaiczne. Nie ma tu


bowiem narzdzi-projektantw, ktre towarzyszyy Visual Basicowi od samych
pocztkw. Dziki klasom realizacja interfejsu jest wprawdzie atwiejsza w C++ ni
w czystym C, lecz mimo to daleko mu jeszcze do VB. W gruncie rzeczy moe si
okaza, e wanie ze wzgldu na obecno klas programowanie w VB.NET bdzie
dla niektrych trudniejsze ni przy uyciu tradycyjnego Visual Basica.
G Sabsza kontrola typw sabsza kontrola typw ma oczywicie rwnie swoje

negatywne strony. Wskaniki oraz rzutowanie s mechanizmami skomplikowanymi


do opanowania oraz trudnymi w realizacji. Moliwoci popenienia bdw jest
wiele, a pomyki te zwykle okazuj si katastrofalne dla programu.

Jzyk C#
Jzyk C# jest najnowsz propozycj firmy Microsoft z rodziny jzykw C. Poniewa analogicznie
do innych jzykw w technologii .NET bazuje on na wsplnym rodowisku uruchomieniowym
CLR, nie jest kolejn wersj C w tradycyjnym rozumieniu.
Nieco dziwnym wydaje si fakt, e Microsoft pozostawi moliwo tworzenia kodu niezarzdzanego w C oraz C++, a nie przewidzia takiej opcji dla Visual Basica. Wiele osb preferujcych
starego Basica moe zrezygnowa ze zmiany wersji Visual Studio wanie z powodu jego
braku wrd nowych jzykw.
W jaki sposb jzyk C# mieci si w ramach naszego celu, jakim jest nauka programowania w C
oraz C++? Jest wielce prawdopodobne, e programici, ktrzy przesid si z Visual Basica
na platform .NET, wybior wanie jzyk C#. Dlaczego? Poniewa wierno Visual Basicowi nie ma ju specjalnego uzasadnienia. Skadnia klas w C# jest prostsza i bardziej logiczna
w porwnaniu do VB.NET. Ponadto s zadania, ktrych realizacja jest moliwa w C#, przeciwnie ni w Visual Basic .NET.
Jzyk C# w porwnaniu do VB.NET ma podobne zalety. Wyposaony bdzie w ten sam modu projektanta co Visual Basic; rwnie rodowisko uruchomieniowe jest wsplne dla obu
jzykw. Najwiksze rnice pomidzy jzykami .NET dotyczy bd skadni.
Jzyk C# odziedziczy po C++ wiele zalet i wad. Najistotniejsz rnic jest fakt umieszczenia C# na szczycie wielkiego rodowiska uruchomieniowego (CLR). Bdzie to miao niewtpliwie wpyw na jego wydajno oraz na atwo dystrybucji.
Jzyk C# ma wielk szans, aby sta si przyszoci narzdzi programistycznych firmy
Microsoft. Bdzie to podstawowy jzyk technologii .NET, a take ten najczciej uywany
wewntrznie w firmie Microsoft.

You might also like