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:
Dastur ishini tuxtatuvchi va mavjud xatolar tugrisida ma’lumot beruvchi protsedurani kurib chiqing :
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.
C: diskdagi AA katalogdagi AB fayldagi ma’lumotlarni o’qib A va B massivlarga joylashtiring. Fayl ma’lumotlari strukturasi quyidagicha.
Do'stlaringiz bilan baham: |