Jak utworzyć bibliotekę DLL (wprowadzenie)      Strona 4 z 7        Dalej
w oparciu o materiały ze stron The Bits

       Krok 3: Uzupełnienie kodu biblioteki DLL

      Formularz już mamy. Teraz możemy już użyć go w bibliotece DLL. Jednak nasza biblioteka nie opiera się tylko na pracy z formularzami. Zatem zajmiemy się dwiema funkcjami, które się w niej znajdą: jedna - eksportowana; i druga - wewnętrzna (tylko do użytku biblioteki). Mając te dwie funkcje oraz nasz formularz, mamy wszelkie podstawy do tworzenia niesamowicie użytecznych DLL-i. Te trzy składowe części biblioteki zadowolą twoje najbardziej wymyślne wymagania, które postawisz swoim przyszłym bibliotekom. Przyznaję, że model który tu przedstawiam należy do najprostszych, jednak chodzi tu o zasady tworzenia, a rozbudowa biblioteki to już twoja inwencja.

      Dodamy jedną funkcję, która zwróci większy (major) i mniejszy (minor) numer wersji DLL-a. Druga funkcja właściwie skopiuje to, co mogłaby zrobić pierwsza, ale pamiętaj że to tylko samouczek i nie koniecznie musi być techniką programowania.

      Zmień zawartość pliku TUTORIAL.CPP żeby wyglądał tak:

 //-----------------------------------------------------

 #include <vcl\vcl.h>

 #pragma hdrstop

 //------------------------------------------------------

 static short int siDLL_MAJOR_VERSION_NO=1;

 static short int siDLL_MINOR_VERSION_NO=0;

 //-----------------------------------------------------

 USERES("tutorial.res");

 //------------------------------------------------------

 extern "C" __declspec(dllexport) void VerNo(short int *,
                                            short int *);

 void GetVersionNumbers(short int *,short int*);

 //------------------------------------------------------

 int WINAPI DllEntryPoint(HINSTANCE hinst,
                              unsigned long reason, void*)

 {

 return 1;

 }

 //-------------------------------------------------------

 void VerNo(short int *iMAJOR,short int *iMINOR)

 {

 GetVersionNumbers(iMAJOR,iMINOR);

 return;

 }

 //--------------------------------------------------------

 void GetVersionNumbers(short int *iMAJOR_VERSION,short int
                                            *iMINOR_VERSION)

 {

 *iMAJOR_VERSION=siDLL_MAJOR_VERSION_NO;

 *iMINOR_VERSION=siDLL_MINOR_VERSION_NO;

 return;

 }

 //--------------------------------------------------------
      Musimy prześledzić kilka rzeczy. Dzięki poniższemu wyrażeniu:

 extern "C" __declspec(dllexport) void VerNo(short int *,
                                             short int *);
      funkcja VerNo jest "widoczna" dla programów korzystających z biblioteki. Modyfikator "C" chroni kompilator przed tzw. wikłaniem nazwy deklarowanej funkcji, jest on charakterystyczny dla C++ i pozwala na używanie techniki obiektowej przy przeładowywaniu funkcji oraz operatorów. Wykracza to poza ramy tego samouczka, więc na razie niech ci wejdzie w nawyk używanie go tak jak w tych przykładach. Następny modyfikator, __declspec(dllexport), oznacza że funkcja jest eksportowalna na zewnątrz biblioteki. Bez tego modyfikatora, funkcja byłaby dostępna dla funkcji będących tylko wewnątrz DLL-a, i nigdzie indziej - funkcja wewnętrzna. Reszta deklaracji jest standardowa i nie wymaga komentarza.

      Druga funkcja, GetVersionNumbers:

 void GetVersionNumbers(short int *,short int*);
      jest dość typowa, co do deklaracji. Brak modyfikatora __declspec(dllexport) sprawia, że funkcja ta jest tylko na wewnętrzny użytek biblioteki (jest funkcją wewnętrzną). Formularza (wciąż trzeba go zadeklarować i stworzyć) oraz funkcji VerNo użyjemy w programie testującym. Możesz nie podzielać mojego zdania, ale uważam że warto umieszczać w bibliotekach numery ich wersji.

      Teraz zajmiemy się dodaniem formularza do naszej biblioteki....

Uwaga: Autorzy oraz The Bits, nie ponoszą odpowiedzialności za ewentualne szkody wynikłe z postępowania według zasad tego samouczka.
(c)1998 Peter Hamilton-Scott, Dallen Masters, & Simon Rutley-Frayne. 1999 Allan Carlton & Will Green. 
Tłumaczenie:  Maciek Durman

1  2  3  4  5  6  7