Strefa C++ Builder'a
Jak utworzyć bibliotekę DLL (wprowadzenie) Strona
3 z 7 Dalej
w oparciu o materiały ze stron The Bits
Krok 2: Utworzenie formularza
Utworzymy teraz formularz w katalogu DLLTUTOR. Wybierz File|New Form. C++Builder utworzy
typowy formularz. Zanim zaczniemy szczegółowo omawiać formularz, wybierz z palety komponentów:
dwie etykiety (Label1, Label2); dwa pola edycyjne (Edit1, Edit2); oraz dwa przyciski (Button1,
Button2). Wszystkie te komponenty umieść na formularzu. Aby zachować spójność z dalszą częścią
samouczka, zmień odpowiednie właściwości komponentów tak, żeby ich wartości były zgodne z tym
co pokazano poniżej:
Komponent
Właściwość
Wartość
Form
Caption
Dodaj dwie liczby
Name
frmAddNumbers
Position
poScreenCenter
Label1
Caption
Pierwsza liczba:
Label2
Caption
Druga liczba:
Button1
Caption
&Oblicz
Button2
Caption
&Anuluj
Edit1
MaxLength
5
Text
""
Edit2
MaxLength
5
Text
""
Teraz wybierz File|Save i zapisz formularz pod nazwą Add2Nos. Celem tego formularza jest
umożliwienie wprowadzenia liczby całkowitej do każdego z dwóch pól edycyjnych (Edit1, Edit2). Jeśli
użytkownik kliknie przycisk Oblicz, to te dwie liczby zostaną dodane do siebie, a wynik zostanie
zwrócony do funkcji wywołującej. Jeśli zaś użytkownik kliknie przycisk Anuluj, to nastąpi powrót z
funkcji bez dodawania liczb. Kod biblioteki DLL powinien teraz wyglądać jak poniżej. Zauważ, że
linia USEFORM jest dopisywana automatycznie przez IDE.
//--------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------
USEFORM("Add2Nos.cpp", frmAddNumbers);
//---------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst,
unsigned long reason, void*)
{
return 1;
}
//---------------------------------------------------------
Jak powiemy funkcji wywołującej który przycisk został kliknięty? Ano zwrócimy zmienną typu bool
jako wynik funkcji. Jeśli będzie "true", to funkcja wywołująca wie, że zwrócono poprawną liczbę i
może wtedy wykonać odpowiednie operacje. Jeśli będzie "false", to funkcja wywołująca wie, że
kliknięto Anuluj.
Dalej, pozwolimy użytkownikowi zdefiniować dwa domyślne stringi, które wstawimy do pól
edycyjnych w chwili tworzenia formularza. Oto deklaracja (prototyp) takiej funkcji w bibliotece DLL,
której używał będzie program wywołujący:
bool Add2(char *, char *, long int *);
zatem pseudo-kod mógłby wyglądać np. tak:
if(Add2("123","456",&Sum))
{
// Kliknięto Oblicz. Mamy sumę.
}
else
{
// Kliknięto Anuluj. Nic nie rób.
}
Plik Add2Nos.cpp powinien wyglądać tak:
//---------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Add2Nos.h"
//---------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmAddNumbers *frmAddNumbers;
//--------------------------------------------------
__fastcall TfrmAddNumbers::TfrmAddNumbers(TComponent* Owner)
: TForm(Owner)
{
bResult = false;
}
//---------------------------------------------------
void __fastcall TfrmAddNumbers::Button1Click(TObject *Sender)
{
bResult = true;
Close();
}
//--------------------------------------------------
void __fastcall TfrmAddNumbers::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------
Zdefiniowaliśmy zmienną typu bool o nazwie bResult, która przekaże informacje do programu
wywołującego o tym, który przycisk został kliknięty. Ale nie zadeklarowaliśmy jeszcze naszej zmiennej
bResult, zatem zrobimy to teraz w pliku nagłówkowym. Aby się do niego dostać, kliknij zakładkę
ADD2NOS.CPP w oknie edytora kodu. Wskaż myszą nazwę pliku na zakładce i kliknij prawym
przyciskiem. Z rozwiniętego menu kontekstowego wybierz Open Source/Header File, co umieści plik
nagłówkowy (Add2Nos.h) pod kolejną zakładką w oknie edytora.
Zmień zawartość pliku nagłówkowego tak, żeby wyglądał jak poniżej:
//-----------------------------------------------------
#ifndef Add2NosH
#define Add2NosH
//-------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//-------------------------------------------------------
class TfrmAddNumbers : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TLabel *Label2;
TButton *Button1;
TButton *Button2;
TEdit *Edit1;
TEdit *Edit2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TfrmAddNumbers(TComponent* Owner);
bool bResult;
};
//--------------------------------------------------
extern PACKAGE TfrmAddNumbers *frmAddNumbers;
//--------------------------------------------------
#endif
Zapisz formularz, używając File|Save. Przypomnijmy jeszcze raz kilka istotnych miejsc w formularzu.
Wewnątrz pliku nagłówkowego Add2Nos.h znajduje się zmienna typu bool - bResult. Zdefiniowano
ją w sekcji public definicji formularza. Zmienna ta musi być "widoczna" dla biblioteki DLL, kiedy w
czasie wykonywania będziemy tworzyć egzemplarz formularza. Dlatego też nie mogliśmy jej umieścić
w sekcji private, gdyż zakres jej ważności byłby tylko w granicach klasy, a nie poza nią (a o to
właśnie nam chodzi!).
Zerknij teraz na kod w pliku ADD2NOS.CPP. Zwróć uwagę, że bResult jest w konstruktorze
formularza ustawiona na "false", a wartość "true" przybiera tylko wewnątrz funkcji obsługującej
zdarzenie OnClick przycisku Oblicz.
Jakkolwiek jest to kwestią wyboru. Równie dobrze mógłbyś ustawić ją na "false" wewnątrz funkcji
dla zdarzenia OnClick przycisku Anuluj. Ja jednak wolę używać konstruktora formularza do takich
celów, gdyż wtedy łatwiej znaleźć mi wszystkie zainicjalizowane zmienne. Jest to szczególnie
przydatne, kiedy tworzysz coraz większe projekty, przy których łatwo można zapomnieć gdzie
znajdują się pierwsze inicjalizacje zmiennych.
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
Wyszukiwarka
Podobne podstrony:
dll3więcej podobnych podstron