Delphi'de dll kütüphanesi oluşturma. Delphi'de dinamik kitaplıkların (DLL'ler) oluşturulması ve geliştirilmesi. Viewer'ımızı tüm DLL'lere ekliyoruz

Delphi'de yeni bir DLL oluşturmak için menü komutunu seçin Dosya > Yeni > Diğer. Panelde Ürün Kategorileri vikna Yeni öğelerüniversite seç Delphi Projeleri, ardından öğeye tıklayın Dinamik Bağlantı Kitaplığı sağ panelde bir pencere var.

Meister DLL Sihirbazı DLL kitaplığının çıktı kodunun ana dosyasını oluşturur; bu, birincil program için oluşturulan çıktı koduna tam olarak benzer. O da aynı sorumluluğa sahip. bu dosyanın ayrılmış bir sözcükle başladığını kütüphane, Ama değil programı.

Kütüphane Projesi1; (DLL bellek yönetimi hakkında önemli not: DLL'niz dizeleri parametre olarak geçiren veya uygulayan herhangi bir prosedürü veya işlevi dışa aktarıyorsa, ShareMem kitaplığınızın USES yan tümcesindeki VE projenizin (Proje Görünümü Kaynağını seçin) USES yan tümcesindeki ilk birim olmalıdır. DLL'nize ve DLL'nizden iletilen tüm dizelere - kayıtlar ve sınıflarda yuvalanmış olanlar bile. BORLNDMM.DLL kullanarak, PChar veya ShortString parametrelerini kullanarak dize bilgilerini iletin. (Proje -> Çıktı Kodunu Göster)) DLL'inizin prosedürler olsun, dışa aktardığı veya sıralı işlevlerin parametresi veya sonucu olarak satırları ileten işlevler. Bu, DLL'nizden aktarılan veya bakımı yapılan tüm satırları ve o sınıfın kayıtlarında yer alan satırlara olan bağlantıları içerir. ShareMem modülü, DLL kitaplığından aynı anda oluşturulması gereken BORLNDMM.DLL paylaşılan belleğinin yöneticisine yönelik bir arayüz modülüdür. BORLNDMM.DLL'nin tehlikeye atılmasını önlemek için, satır bilgilerini PChar veya ShortString parametrelerine ekleyin. ) SysUtils'i, Sınıfları kullanır; ($R *.res) başlangıç ​​bitiş.

Tek seferde yapmanız gereken tek şey bloktan önce bir alt program eklemek başlangıç-son, her şeyden. Daha sonra DLL'de bulunabilen ancak harici programlarda bulunamayan dahili bir alt program seçersiniz. Programı başka programlardan veya diğer DLL'lerden bağlamak istiyorsanız, onu dışa aktarmanız gerekir. Alt programı onlara aktarmak için onları listeye ekleyin ihracat. liste ihracat listeyle aynı sözdizimine sahiptir kullanır tıpkı listedekiler gibi ihracat Herhangi bir öğenin alt program olup olmadığı, modül olup olmadığı.

liste ihracat Lütfen bloğun hemen önüne yerleştirin başlangıç-son. Basit bir kitaplığın çıktı kodunu gösteren Liste 1'e bakın. FirstLib.dll, bir işlevi dışa aktarır.

Liste 1. Basit bir DLL

Kütüphane FirstLib; function Max3(Sayı1, Sayı2, Sayı3: Tamsayı): Tamsayı; stdçağrı; begin Sonuç:= Sayı1; eğer Sayı2 > Sonuç ise Sonuç:= Sayı2; eğer Num3 > Sonuç ise Sonuç:= Num3; son; (Dışa aktarma işlevi Max3) Max3'ü dışa aktarır; başla bitsin.

Alt programı listeye eklerseniz ihracat Daha sonra programı onların adına aktaracaksınız. Ek yönergeleri kullanarak alt programı başka adlar altında da dışa aktarabilirsiniz. isim veya sıralı öneme sahip ek yardım için vikorist'in direktifi indeks. Ancak direktifi koyun indeks tavsiye edilmez.

Aşağıda ek bir sıra değeri kullanan veya başka adlar altında dışa aktarma yönergesinin örneği verilmiştir:

Max3 adını "MyMax3Function", SaySomething dizin 1'i dışa aktarır;

Statik içe aktarma, bir DLL'yi içe aktarmanın olası iki yolundan en basitidir. Statik çekim, çekim saatinin altındaki dinamik bağlantılara da denir ( yükleme süresi dinamik bağlantısı), çünkü seçilen DLL'ler programlar başlatıldığında otomatik olarak yüklenir.

Bir DLL'ye statik olarak erişmek için, çağıran alt programların ve eklentilerin ifadelerini kopyalamanız ve bunları ek yönergelere atamanız gerekir. harici derleyiciye alt programın bir nesne dosyasında veya bir DLL dosyasında bulunduğunu bildirir.

Rutinleri DLL'lerden içe aktarırsanız, bunları yönergelerle etiketlemeniz gerekir. harici, arkasında alt programların uygulanmasını içeren DLL kitaplığının adını belirtir. Aşağıda içe aktarma işlevinin bir örneği verilmiştir MaksZ kütüphaneden FirstLib.dll:

Fonksiyon Max3(Sayı1, Sayı2, Sayı3: Tamsayı): Tamsayı; stdçağrı; harici "FirstLib.dll";

Daha sonra içe aktarmadan önce alt programı yeniden adlandırabilirsiniz. Bunun için alt programa başka isimler altında oy verilmesi ve son olarak ek direktifler için ilk isimlere oy verilmesi gerekir isim:

Fonksiyon Max(Sayı1, Sayı2, Sayı3: Tamsayı): Tamsayı; stdçağrı; harici "FirstLib.dll" adı "Max3";

Ayrıca işlevleri DLL'lerden de içe aktarabilirsiniz. Bölüm için neden bir içe aktarma modülü oluşturup standart bir alt program başlığı yazmanız gerekiyor? arayüz ve harici uygulaması - bölümde uygulama bu modül. Listelenen 2 okumanın kütüphane içe aktarma modülü için yeni bir kodu var FirstLib.dll.

Listeleme 2. FirstLib.dll kütüphanesini içe aktarma modülü.

Birim FirstLibInf; arayüz fonksiyonu Max3(Sayı1, Sayı2, Sayı3: Tamsayı): Tamsayı; stdçağrı; uygulama const FirstLib = "FirstLib.dll"; (Derleyiciye Max3 fonksiyonunun uygulamasının FirstLib.dll kütüphanesinde olduğu bilgisi verilir) function Max3; harici FirstLib; son.

Bir DLL ve içe aktarma modülü oluşturduktan sonra DLL'yi birime çevirin. alt programın normal şekilde çalıştığını. DLL'nin kendisini çalıştırmak mümkün değildir; DLL'ye erişecek bir test programı oluşturmanız gerekir. Para kazanmanın en iyi yolu, tam ölçekli bir projeye yeni bir proje ekleyerek proje grubu oluşturmaktır. Bunun için öğeye sağ tıklamanız gerekir ProjeGrubu1 pencerede Proje Müdürü(Proje yöneticisi) ve içerik menüsünden komutu seçin Yeni Proje Ekle Yak, Şekil 2'de gösterilmektedir. 1.

Listeleme 3. FirstLib.dll kütüphanesinden içe aktarılan Max3 alt programlarının doğrulanması.

Birim Birim1; arayüz Windows, Mesajlar, SysUtils, Varyantlar, Sınıflar, Grafikler, Kontroller, Formlar, İletişim Kutuları, FirstLibInf, StdCtrls'i kullanır; TMainForm yazın = class(TForm) Edit1: TEdit; Düzenleme2: TDüzenle; Düzenleme3: TDüzenle; Etiket1: TLabel; Etiket2: TLabel; Etiket3: TLabel; Max3Button: TButton; prosedür Max3ButtonClick(Gönderen: TObject); özel (Özel beyanlar) genel (Kamuya açık beyanlar) sonu; var MainForm: TMainForm; uygulama ($R *.dfm) prosedürü TMainForm.Max3ButtonClick(Sender: TObject); var En BüyükSayı: Tamsayı; begin En Büyük Sayı:= Max3(StrToInt(Edit1.Text), StrToInt(Edit2.Text), StrToInt(Edit3.Text)); MesajDlg(Format("En yüksek: %d.", ), mtInformation, , 0); son; son.

Kaynaklı literatür: İç Dünya Borland Delphi 2006. Ivan Khladni.

Bir kereden fazla Delphi'de DLL oluşturma ve vikoristan DLL oluşturma probleminden sayfaları kaldırma fırsatım oldu. Bu yazımızda her şeyi anlamanıza ve kendi kütüphanenizi oluşturmanıza yardımcı olacağız. Dinamik olarak bağlantılı kitaplıklar (Dinamik Bağlantı Kitaplığı), gizli bir kaynak kümesini çıkarmaya çalışırken çeşitli eklentilere olanak tanır. DLL'de bulunan prosedür ve işlevlerin, bunları oluşturmak için kullanılan sürecin ortasında tamamlanması önemlidir. DLL, tüm eklentilere, istenen tüm eklentiler tarafından yakından analiz edilen kaynağın tek bir kopyasının, onları çağıran her program için çalışan alt programlar, yani kendi kopyası olarak yönetilmesini sağlar. Ayrıca, DLL'lerin yalnızca prosedürleri ve işlevleri dışarı aktarabildiği, ancak türleri, sabitleri vb. dışarı aktaramadığı alt programları da etkinleştirebilirsiniz.

Belleğin DLL yapısıyla ilgili “Delphi Dersleri”nden bir ders almak istiyorum:

DLL, programlar tarafından yönetilen ve herhangi bir yığın veya bilgi gerektirmeyen bir kütüphanedir. DLL'lere yerleştirilen işlevler, yığını çağıran programın bağlamında paketlenir. Tüm bu işlevler, programın bir kopyası değil, kütüphaneye ait olan bir veri segmenti oluşturmak için kullanılır. DLL'lerin bu organizasyonu nedeniyle, bellek tasarrufu, çalışan tüm programların, modüllerinin deposuna başka herhangi bir standart işlev dahil etmeden, tek bir DLL modülü kullanması gerçeğinden kaynaklanmaktadır. Çoğunlukla DLL'ler, Pascal'da modüllerin (birim anlamında) kavramsal olarak planlanmasına benzer şekilde, bunlar ve diğer mantıksal işaretlerle birleştirilen işlev kümeleri etrafında oluşturulur. Aradaki fark, Pascal modüllerinden gelen işlevlerin bağlantı aşamasında statik olarak bağlanması ve DLL'lerden gelen işlevlerin çalışma zamanında dinamik olarak bağlanması gerçeğinde yatmaktadır.

Oluşturma DLL'si

DLL yapısı Object Pascal modülünün temel yapısından çok az farklıdır. DLL, Kitaplık sözcüğüyle başlar ve ardından kitaplığın adı gelir. Diğer istemcilere (dışa aktarımlar) atanan DLL'ler gibi işlevler ve prosedürler, dışa aktarma yönergesinden sonra eski durumuna döndürülür.

Bir cilt prosedürü veya işlevi için Index direktifini takip ederek bir sayı belirleyebilirsiniz. Sayı günlük ise derleyici otomatik indeksleme yapacaktır. Prosedür numarası yerine name yönergesinde belirtilen benzersiz adları kullanabilirsiniz. Hiçbir işlev adı veya numarası belirtilmezse Delphi, işlev adıyla eşleşen adlara aktarmayı kabul eder.

Kütüphane ayrıca içe aktarıldığında girilecek olan başlatma kodunu da yerleştirebilir. Başlangıç ​​ve bitiş arasında yer alır. Eksen yapısı DLL'si:

Kitaplık First_Dll; kullanır<используемые модули>; <объявления и описания функций>ihracat<экспортируемые функции> <описание процедур и функций>başlamak<инициализационная часть>son.

Dışa aktarma fonksiyonlarının açıklamasını dışa aktarmalar bölümünde sunacağım:

Dışa Aktarma Fonksiyonu1 indeksi 2; İşlev2 adı "My_sqr"; İşlev3;

Tahmin ettiğiniz gibi bu işlevler dışa aktarma için kullanılamayabilir!

Wikoristannya DLL

DLL'lerden prosedür ve işlevlerin değiştirilmesini gerektiren bir modül, harici yönergeyi geçersiz kılmaktan suçludur. DLL oluşturmanın iki yolu vardır (dinamik ve statik). İlk durumda, bir DLL'den bir işlevi çağıran program, kütüphanenin adını ve bu kütüphaneye iletildiği giriş noktasını bilir, böylece kütüphane değişmez. Başka bir pencerede seçilen DLL'nin önünde bir iz vardır, böylece gerekli kütüphane boştur ve gerekli bir alt program vardır.

Programı adını ve numarasını kullanarak içe aktarabilirsiniz. Numara için alt programların aranması daha hızlı görünecektir, ancak manuel olarak yapılmayacaktır.

Aşağıda, uygulamada görüldüğü gibi First_DLL dosyamızın işlevini içe aktarmanın bir örneği verilmiştir:

(belirli adlarla içe aktar) Function ImportByName; harici "First_DLL" adı "My_sqr"; (Dizine göre içe aktar) Function ImportByOrdinal; harici "First_DLL" dizini 2; (orijinal isme göre içe aktar) İşlev İşlev3; harici "First_DLL";

DLL oluşturmanın statik yöntemine bir göz attık. Ancak bazı durumlarda kütüphanenin kendisine nasıl ihtiyaç duyulacağı önceden belli olmadığından, bu dinamik bir yöntem kullanılarak hızlı bir şekilde yapılabilir:

WinTypes, WinProcs, ...'u kullanır; TMyProc yazın = prosedür; var Sap: THandle; MyImportProc: TMyProc; begin Handle:=LoadLibrary("FirstDLL"); Eğer Sap>=32 ise o zaman (<=32 - ошибка! } begin @MyImportProc:=GetProcAddress(Handle,"My_sqr"); if MyImportProc<>nil o zaman ...... (burada fonksiyon başarılı bir şekilde kaldırılmıştır) end; FreeLibrary(Tanıtıcı); son;

Ancak burada yazılan her şey hiç de net değil ve ben gerçek, eksiksiz uygulamalar istiyorum. Makalelerde çok az uygulama ve yalnızca teori olduğundan kafam karışmaya başladı, bu yüzden saygınıza basit bir vikoristan DLL örneği öneriyorum.

Dosya -> Yeni menüsüne tıklayın ve DLL'yi seçin. Oluşturulacak bitmiş şablonu Project1.dpr adı altında kaydedin.

Aşağıda son kod verilmiştir:

Kütüphane Projesi1; SysUtils, Classes'ı kullanır; Fonksiyon Fonksiyon1(x,y:integer):integer; ihracat; bgin sonucu:=x+y; son; Fonksiyon Fonksiyon2(x,y:gerçek):gerçek; ihracat; var t:gerçek; start t:=exp(y*ln(x)); sonuç:=t; son; İşlev1 dizin 1'i, İşlev2 adını "My_sqr" olarak dışa aktarır; başla bitsin.

Burada iki fonksiyon var, biri iki sayının toplamını hesaplıyor ve sayıya göre dışa aktarılıyor, diğeri ise y adımında x'i hesaplayıp ada göre dışa aktarılıyor.

Şimdi yeni bir proje oluşturalım ve onu diğer projelerden, örneğin DemoDLL'den kaydedelim. Formda iki buton vardır; birincisine tıkladığınızda ilk prosedüre tıklanır, diğerine tıkladığınızda ise diğerine tıklanır. Bu demo projesinin yeni kodunun ekseni:

Birim demosu; arayüz Windows, Mesajlar, SysUtils, Sınıflar, Grafikler, Kontroller, Formlar, İletişim Kutuları, StdCtrls'i kullanır; tip TForm1 = sınıf(TForm) Button1: TButton; Düğme2: TDüğme; prosedür Button1Click(Gönderen: TObject); prosedür Button2Click(Gönderen: TObject); özel (Özel beyanlar) genel (Kamuya açık beyanlar) sonu; var Form1: TForm1; uygulama ($R *.DFM) işlevi ImportSumm(x,y:integer):integer; harici "Proje1" dizini 1; //sayıya göre içe aktarma işlevi ImportSqr(x,y:real):real; harici "Proje1" adı "My_sqr"; //ad prosedürünü içe aktar TForm1.Button1Click(Sender: TObject); var t:gerçek; begin //Üçüncü adımda kaç tane iki olacağını keşfedin t:=ImportSqr(2,3); Showmessage(FloatTostr(t)); son; prosedür TForm1.Button2Click(Sender: TObject); var t:tamsayı; begin //Kaç tanesinin 10+10 olacağını keşfedin t:=ImportSumm(10,10); Showmessage(IntTostr(t)); son; son.

Delphi, MySQL programcısı. Mekanı aydınlattı. Uzmanlık Alanı: Bilgi teknolojisi güvenlik yazılımı.

DLL nedir En azından çoğu PC kullanıcısı daha fazla programa sahip olduklarını biliyor, her şeyi bilmeniz ve bu makaleyi okumanız gerekiyor. Bu makalede, DLL'nin ortalıkta dolaştığı tüm abur cuburları gözden geçirmeye çalışacağım.

Gelin kendimize bir bakalım:

  1. Yine “Merhaba Dünya” alanında kendi DLL’mizi oluşturacağız.
  2. Bu DLL'in fonksiyonlarını nasıl kullanacağımızı programlarımızdan öğrenelim.
  3. Bir DLL şarkısını dışa aktaran işlevlere bakmaya başlayalım.
  4. Belki, belki değil.

DLL oluşturma işlemi

En basit şeyle başlayalım; kendi DLL dosyanızı yazın, böylece yalnızca tek bir işleve sahip olabilirsiniz, o da "Merhaba Dünya" bildirimini görüntülemektir.

  1. Delphi'yi başlatın (Delphi 6 kullanıyorum).
  2. Şuraya gidin: Dosya -> Yeni ->Diğer

Yeni Kapılar sekmesinde DLL Sihirbazı nesnesine tıklayın. Yeni bir proje başlıyor. Örneğin MyFirstDLL ile kaydedin.

Temiz bir modül şunun gibi bir şeye sahiptir:

Kütüphane MyFirstDLL; SysUtils ve Sınıfları kullanır; ($R *.res) başlangıç ​​bitiş.

Şimdi Dialogs modülünden ShowMessage() gibi bir fonksiyon daha yazalım. Şimdi işleme başlamadan önce Kullanımlar kısmına Dialogs modülünü ekleyelim. Yaklaşık olarak ne görebiliyorsunuz:

Kütüphane MyFirstDLL; Diyalogları kullanır; MyFirstFunc prosedürü; stdçağrı; ShowMessage'ı başlat("Merhaba Dünya"); son; MyFirstFunc'u dışa aktarır; başla bitsin.

Bildiğiniz gibi burada karmaşık bir şey yok. Fonksiyonları ada göre veya indekse (sayıya) göre arayabileceğinizi söyleyeyim, bunun için şu şekilde yazmanız gerekir:

MyFirstFunc dizin 1'i dışa aktarır;

Bu kodda hiçbir şey anlamıyorsanız, yine de kendiniz anlamaya çalışın. Herhangi bir sorun olmayacağını düşünüyorum... Ale yakscho scho, sonra forum! Şimdi diğer projelerden değer (MyFirstFunc) fonksiyonuna nasıl erişebileceğinizi görelim.

Vikoristannya işlevi DLL

İlk kırıntı eziliyor, küçük olanın hemen arkasında... Bu fonksiyonu nasıl geliştirebiliriz?

Ve en azından iki çekim yöntemi:

  1. Statik
  2. Dinamik

Diğer yol daha basittir, böylece çekim sırasında bekleneni takip edebilir ve çekim sırasında ortaya çıkan tüm faydaları yönetebiliriz. Ale, her şeyden önce ilk yönteme hayret ediyorum:

Yeni bir proje oluşturalım, forma bir buton bırakalım ve OnClick butonunun yanına şunu yazalım:

Prosedür TForm1.Button1Click(Sender: TObject); MyProc()'u başlat; son;

Hepsi bu değil! Projenin uygulama bölümüne şunu yazın:

Uygulama prosedürü MyProc(); stdçağrı; harici "MyFirstDLL.dll" adı "MyFirstFunc";

Hazır! Projeyi derleyin ve düğmeye basın! Bilgileriniz alınır alınmaz her şey yolunda!

Şimdi dinamik çekim yöntemine bakalım. Bu yöntem için LoadLibrary() işlevini kullanın ve son olarak görselleştirme için FreeLibrary() işlevini kullanın.

Popoya hayret edin:

Prosedür TForm1.Button1Click(Sender: TObject); TMyFunc yazın = prosedür; var DLLInstance: THandle; MyFunc: TMyFunc; DLLInstance'ı başlat:= LoadLibrary(PCar("MyFirstDLL.dll")); if (DLLInstance = 0) ardından begin messageDlg("DLL'ye yetki verilemiyor", mtError, , 0); Çıkış; son; @MyFunc'u deneyin:= GetProcAddress(DLLInstance, "MyFirstFunc"); if Assigned(@MyFunc) Then MyFunc() else MesajDlg("Gerekli prosedür bulunamadı!.", mtError, , 0); son olarak FreeLibrary(DLLInstance); son; son;

LoadLibrary() fonksiyonu ile DLL'yi başarılı bir şekilde aldıktan sonra, GetProcAddress() kullanarak, DLL'den prosedürümüzü çağırdığımız fonksiyonumuzun adresini buluyoruz. Son olarak elbette FreeLibrary() oluşturmanız gerekir. Başarılı bir edinimden sonra tüm kodları FreeLibrary()'den önce bir try nihayet bloğuna koymam önemlidir. Bu FreeLibrary sistemi tarafından garanti edilmektedir, blok hariç denemenin ortasında olduğunda, istisna suça (Exception) gönderilmez.

Sağ tarafta LoadLibrary ve FreeLibrary başarılı tıklamalarının genellikle erkekler olduğu görülmektedir. Nedenini eksen alıyorum. Sürece dahil olan cilt kütüphanesi sistemi, cilt LoadLibrary'e başarıyla tıkladığında 1 artan bir şifacı içerir. Görünüşe göre FreeLibrary silindiğinde bu değer değişir ve sıfıra eşit olur, bu da bu işlem için bu kütüphaneye artık ihtiyaç duyulmadığı ve m'yati'den güvenli bir şekilde silinebileceği anlamına gelir.

Eşleştirme kuralına uyulmazsa, bu, kütüphanenin bellekten hemen kurtarılmasından önce (FreeLibrary kuruluysa) veya orada "sıkışmadan" (FreeLibrary kurulu değilse) yapılabilir.

Bu kural sayesinde LoadLibrary / FreeLibrary tıklamalarının olası katkısı konusunda endişelenmenize gerek yoktur.

Şarkı DLL fonksiyonlarının gözden geçirilmesi

Artık DLL'ler de dahil olmak üzere PE formatındaki dosyalardan tüm işlev adlarını çıkarmanın nasıl mümkün olduğunu görebiliriz. Ancak PE formatının yapısı burada görülemez ve yayında herhangi bir açıklama yapılmayacaktır.

Şimdi yeni bir proje oluşturun, onu fonksiyonların adlarını gösterecek olan ListBox formuna yerleştirin.

Eksen tüm proje:

Birim Birim1; arayüz Windows, Mesajlar, SysUtils, Varyantlar, Sınıflar, Grafikler, Kontroller, Formlar, İletişim Kutuları, StdCtrl'leri kullanır; tip TForm1 = sınıf(TForm) lb: TListBox; prosedür FormCreate(Sender: TObject); özel (Özel bildirimler) cmdline: String; ImageBase: DWord; DosHeader: PImageDosHeader; PeHeader: PImageNtHeaders; PExport: PImageExportDirectory; pname:PDWord; isim: PChar; kamuya açık (kamuya açık beyanlar) son; var Form1: TForm1; uygulama ($R *.dfm) prosedürü TForm1.FormCreate(Sender: TObject); FatalOsError prosedürü; ShowMessage'ı başlat(SysErrorMessage(GetLastError())); İptal; son; Değişken i: Tamsayı; (ParamCount() IMAGE_DOS_SIGNATURE) sonra FatalOsError'ı deneyin; PEHeader:= PImageNtHeaders(DWord(ImageBase) + DWord(DosHeader^._lfanew)); if (PEHeader^.Signature IMAGE_NT_SIGNATURE) sonra FatalOsError; PExport:= PImageExportDirectory(ImageBase + DWord(PEHeader^.OptionalHeader.DataDirectory.VirtualAddress)); pname:= PDWord(ImageBase + DWord(PExport^.AddressOfNames)); i:= 0'dan PExport^'a kadar. lb.Items.Add(isim); inc(pname); son; son olarak FreeLibrary(ImageBase); son; Application.ShowMainForm hariç:= False; Uygulama.Sonlandır; son; son; son.

Kodu kendiniz kullanmaya başlamak istiyorsanız ve bunu şu anda yapamıyorsanız, forumumuz size kesinlikle yardımcı olacaktır, gelin!

Viewer'ımızı tüm DLL'lere ekliyoruz

Elimizde hazır bir fonksiyona sahip bir DLL var ve fonksiyona bir göz atıyoruz. Daha fazla robotun kullanışlılığı için eyleme işlevsellik eklemek artık mümkün değildi. Biraz para harcayalım. Gezgin herhangi bir klasörü açabilir. Gelelim Servis -> Klasör Gücü... "Dosya Türleri" sekmesine gidin. Liste DLL formatında görünüyor. Eğer böyle bir şey yoksa “Oluştur” butonunu kabartıp “Uzantı” alanına DLL yazacağız. Tamam yazdırıldı. Bildiğimiz tür DLL’dir. Görebiliyorsunuz ve üzerinde “Dodatkovo” damgası var. "Oluştur" un yanında, "Tasarımlar" alanına içerik menüsünde görüntülenenleri, örneğin DLL Görüntüleyiciyi yazıyoruz. Etrafımıza bakarak programımızı keşfederiz.

Her şey hazır!

Artık DLL formatındaki bir dosyaya sağ tıkladığınızda menüde DLL Görüntüleyicimiz olacaktır. Tüm fonksiyonları seçiyoruz ve hayret ediyoruz!

Hepsi bu, saygınız için teşekkür ederiz!

Kısaltma DLL"dinamik olarak bağlantılı bir kütüphane" anlamına gelir. Delphi'deki Dll Bu, programın kayıt aşamasında bağlandığı bir bilgisayar programının çalışması için gerekli prosedürleri ve işlevleri içeren bir dosyadır.

Gerekli tüm alt programların, ek bir program oluşturmanın gerekli olduğu programların bünyesinde tanımlanabileceği görülüyor. dll dosyası ve ölüm saatinde onunla buluşacak mısın? Oluşturulan programın daha fazla esnekliğini deneyin. Zaman içerisinde veri işleme algoritmaları değişebilir. İşleme işlemleri birçok program tarafından gerçekleştirileceğinden, büyük dosyayı yeniden derleyip yöneticilere yeniden iletmek zorunda kalacaklar. Birkaç prosedür gerektirecek küçük bir dll dosyasını aktarmak ve otomatik olarak çalıştırmak çok daha kolaydır.

Ayrıca dll kütüphanesinin çalışmaları oluşturulacağı programda kalmayacaktır. Bu nedenle, kokuşmuş programlamamızı düşünmeden, programlarımız için dll'lerin oluşturulmasını üçüncü taraf geliştiricilere emanet edebiliriz. Bütün bunlar başlangıçta bitmiş projenin tamamlanmasını ve yöneticilere devredilmesini büyük ölçüde hızlandıracaktır.

DLL Kitaplığı Oluşturma

Delphi'de dll oluştur Ek modülü açmak zor değil. Komutu kullanın Dosya -> Yeni -> -> Diğer... Görüntülenen iletişim kutusunda DLL Wisard simgesini seçin. Sonuç olarak Delphi bir DLL kütüphane projesi oluşturacaktır:

kütüphane 1. Proje;

(DLL bellek yönetimi hakkında önemli not: ShareMem
kütüphanenizin USES cümlesindeki VE projenizdeki ilk ünite (seçin)
Proje Görüntüleme Kaynağı) DLL'niz herhangi bir prosedürü dışa aktarıyorsa USES yan tümcesini veya
dizeleri ileten işlevler - parametreler veya sonuç işlevleri. Bu
DLL'nize ve DLL'nizden iletilen tüm dizeler için geçerlidir;
kayıtlarda ve sınıflarda yuvalanmıştır. ShareMem, arayüz birimidir.
birlikte dağıtılması gereken BORLNDMM.DLL paylaşılan bellek yöneticisi
DLL'inizle. BORLNDMM.DLL'yi kullanmak için dize bilgilerini iletin
vikoryst PChar veya ShortString parametreleri. )

kullanır
Sistem Araçları
Sınıflar;

($R *.res)

başlamak
son
.

Yeni dll kütüphanesi için bir isim seçin ve komutu seçerek onu yakındaki bir klasöre kaydedin. Dosya -> Farklı kaydet... Babanın dll dosyasının dahil edilmeyeceği 4 dosyası var. Elbette bunlar sadece projeyi anlatan metin dosyalarıdır. Kütüphane dll dosyası oluşturmak için projeyi derlemeniz gerekir. Takımı takip et Proje -> Projeyi Derle. Sonuç olarak klasörümüzde ana programın bağlanacağı bir dll dosyası görünecektir.

Kütüphane hâlâ boş.

...metin şu anda düzenleme aşamasındadır...