YAratilishi
DLL yaratish uchun maxsus Library suzi ishlatiladi.
DLL e‟lonlar bulimi Exports suzidan boshlanib, eksport kilinayetgan podprogrammalar ro‟yxatini
o‟z ichiga oladi:
Library MyLibrary;
Function MyFunc (...):...;
begin
end;
Procedure MyProc;
begin
end;
Exports
MyFunc, MyProc;
begin
end.
Podprogramma nomidan tashqari DLL ga uning tartib nomeri joylashtiriladi: birinchi
podprogramma nomeri 0, keyingisi - 1 va xokazo. Dasturchi bu indeksatsiyani o‟zgartirishi va 0
dan 32767 gacha nomer qo‟yishi mumkin:
Expots
MyFunc index 1, MyProc index 2;
Dasturchi eksport qilinayotgan podprogramma uchun tashqi nom berishi mumkin:
Exports
MyFunc index I name 'NEWFUNC';
CHaqirayotgan dastur eksport qilinayotgan podprogramma tashqi nomi yoki indeksi bo‟yicha
chaqirishi mumkin.
Misol
Misol tariqasida cmplx modulini kuramiz.
Library Cmplx;
uses
SysUtils, Classes;
{$R *.RES}
type
TComplex = record Re, Im: Real;
end;
function AddC(x, y: TComplex): TComplex; stdcall;
begin
Result.Im := x.Im + y.Im;
Result.Re := x.Re + y.Re end;
function SubC(x, y: TComplex): TComplex;
stdcall;
begin
Result.Im := x.Im - y.Im;
Result.Re := x.Re - y.Re
end;
function MulC(x, u: TComplex): TComplex;
stdcall;
begin
Result.Re
:=
x.Re * y.Re + x.Im * y.Im;
Result.Im
:=
x.Re * y.Im - x.Im * y.Re
end;
function DivC(x, y: TComplex): TComplex;
stdcall;
var
z: Real;
begin
z := sqr(y.Re) + sqr(y.Im);
try
Result.Re := (x.Re * y.Re + x.Im * y.Im)/z;
Result.Im := (x.Re * y.Im - x.Im * y.Re)/z
except
Result.Re := le+309;
Result.Im := le+309
end
end;
Exports
AddC index 1 name 'ADDC' resident,
SubC index 2,
MulC index 3,
DivC index 4;
begin
end.
Bu yerda stdcall bu DLL ga Delphi dan boshqa tillardan murojaat qilishga imkon beradi. Agar
bibliotekaga fakat Delphi tilidagi dasturdan murojaat qilinsa bu so‟zning keragi yo‟q.
Podprogrammalarga murojaat qilish uchun ularni kuyidagicha e‟lon qilish lozim:
Procedure MyProc; External 'MyDLL';
Agar indeks bo‟yicha chaqirish lozim bulsa:
Procedure MyProc; External 'MyDLL' index 2;
Bundan tashqari dasturchi tashqi nomni o‟zgartirishi xam mumkin:
Procedure MyProc; External 'MyDLL' Name 'ExtName';
Foydalanish
Statik
yuklash
Dasturda Smpix bibliotekasi quyidagicha e‟lon qilinishi lozim.
type
TComplex = record Re, Im: Real;
end;
function ADDC(x, y: TComplex): TComplex; stdcall; External 'Cmplx' ;
function SubC(x, y: TComplex): TComplex; stdcall; External 'Cmplx' ;
function MulC(x, y: TComplex): TComplex; stdcall; External 'Cmplx' ;
function DivC(x, y: TComplex): TComplex; stdcall; External 'Cmplx';
Interfeysli modul
DLL-podprogrammalarni chaqirishda yozuv kabi murakkab turdagi ma‟lumotlarni uzatishga
to‟g‟ri kelishi mumkin. Agar biror DLL ga kup murojaat qilinsa murakkab tur e‟lon kilingan
interfeysli moduldan foydalanish qulaydir. Masalan:
Unit Complx;
Interface
type
TComplex = record Re, Im: Real;
end;
function AddC(x, y: TComplex): TComplex; stdcall;
External 'Cmplx' index 1;
function SubC(x, y: TComplex): TComplex; stdcall;
External 'Cmplx' index 2;
function MulC(x, y: TComplex): TComplex; stdcall;
External 'Cmplx' index 3;
function DivC(x, y: TComplex): TComplex; stdcall;
External 'Cmplx' index 4;
Implementation end.
Boshqa tilda yozilgan DLL protseduralariga murojaat qilinganda ularning tashqi nomi Delphi
qoidasiga to‟g‟ri kelmasligi mumkin. Masalan C++ tili identifikatorlarda “@” simvolidan
foydalanishga ruxsat beradi. Bu xolda Delphi qoidasiga mos nom berib name suzidan sung asl
nomini ko‟rsatish kerak. Masalan:
function MyFunction: WordBool; stdcall;
external 'MyDLL' name '_MyFunction@12'
Fayllar bilan ishlash
funksiya va protseduralari
Kiritiladigan va chiqariladigan ma‟lumotlar soni ko‟p miqdorda bo‟lsa ularni faylda saqlash
dasturda qulaylik tug‟diradi. Bu ma‟lumotlar oddiy matn (tekst) fayllarida saqlanadi. Fayl
o‟zgaruvchisi dastur bosh qismida e‟lon qilinadi, ya‟ni
Type f=text;
Var
fx:f;
bu yerda f -fayl tipi, oddiy matn faylni bildiradi;
fx-fayl o‟zgaruvchisi.
Kerakli fayldan ma‟lumotlarni o‟qishga tayyorlash uchun Assign va Reset funksiyalari ishlatiladi.
Topshiriqlar:
1.
Dastur ishini tuxtatuvchi va mavjud xatolar tugrisida ma‟lumot beruvchi protsedurani
kurib chiqing :
2.
2. Yuqoridagi C: diskdagi AA katalogdagi AB fayldagi ma‟lumotlarni A va B massivlarga
o‟qib shu massiv mos elementlarini qo‟shib S massivni tashkil qiling va A,B,C
massivlarini ABC nomli faylga joylashtiring.
3.
C: diskdagi AA katalogdagi AB fayldagi ma‟lumotlarni o‟qib A va B massivlarga
joylashtiring. Fayl ma‟lumotlari strukturasi quyidagicha.
Do'stlaringiz bilan baham: |