Krok 6: Korzystanie z biblioteki DLL w programie //----------------------------------------------------- #include <vcl.h> #include <stdlib.h> #pragma hdrstop #include "Unit1.h" //------------------------------------------------------ #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; extern "C" __declspec(dllimport) void VerNo(short int*, short int*); extern "C" __declspec(dllimport) bool Add2(char*, char*, long int*); //------------------------------------------------------ __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { short int iMajor, iMinor; VerNo(&iMajor, &iMinor); Edit3->Text = "Wersja: " + (AnsiString)iMajor + "." + (AnsiString)iMinor; } //---------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { long int Total; if (Add2(Edit1->Text.c_str(), Edit2->Text.c_str(), &Total)) Edit3->Text = (AnsiString)(int)Total; else Edit3->Text = "Użytkownik anulował!"; } //------------------------------------------------------ void __fastcall TForm1::Button3Click(TObject *Sender) { exit(0); } //----------------------------------------------------Zwróć uwagę na następujące deklaracje funkcji DLL-a: extern "C" __declspec(dllimport) void VerNo(short int *,short int *); extern "C" __declspec(dllimport) bool Add2(char *,char *,long int *);Zauważ że obie są prawie identyczne z tymi w bibliotece, za wyjątkiem że teraz mówimy Builder'owi, iż są one importowane (dllimport). Builder musi wiedzieć gdzie te funkcje się znajdują. Jeśli teraz spróbujesz uruchomić projekt, to Builder wyświetli błąd, gdyż nie zna jeszcze ich lokalizacji w DLL-u. Aby temu zaradzić, musimy kazać Builder'owi korzystać z biblioteki importowej, którą wcześniej utworzyliśmy w Kroku 5. A robi się to tak: Wybierz Project/Add to Project. W polu Pliki typu: zmień na Library file (*.lib). Wyświetli się plik TUTORIAL.LIB, kliknij go podwójnie a Builder doda go do projektu. Aby to sprawdzić, wybierz Project/View Makefile. Zobaczysz coś podobnego do tego poniżej: # --------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # ------------------------------------------------------------ # IDE SECTION # --------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # -------------------------------------------------------- VERSION = BCB.03 # ----------------------------------------------------------- PROJECT = Project1.exe OBJFILES = Project1.obj Unit1.obj RESFILES = Project1.res DEFFILE = RESDEPEN = $(RESFILES) Unit1.dfm LIBFILES = tutorial.lib LIBRARIES = SPARELIBS = VCL35.lib PACKAGES = VCLX35.bpi VCL35.bpi VCLDB35.bpi VCLDBX35.bpi bcbsmp35.bpi dclocx35.bpi \ QRPT35.bpi TEEUI35.bpi VCLSMP35.bpi TEEDB35.bpi TEE35.bpi ibsmp35.bpi \ NMFAST35.bpi INETDB35.bpi INET35.bpi RZDLST16.bpi RZLST16.bpi RZCMN16.bpi # --------------------------------------------------------------Spójrz na następującą linię w pliku makefile: LIBFILES = \data\C++\TESTPROG\tutorial.libOczywiście twoja ścieżka może być inna od mojej, ale na pewno wskaże na plik TUTORIAL.LIB, który będzie kojarzył bibliotekę DLL z wykorzystującym ją twoim programem.
|