Krok 3: Uzupełnienie kodu biblioteki DLL //----------------------------------------------------- #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....
|