DLL fonksiyonlarini program icine gommek

Başlatan bunalmis, 15 Kasım 2010, 12:58:07

z

Yazilan programlar, delphi yuklu olmayan bir baska PCde calistirmak istendiginde bilmem ne dll bulunamadi gibi mesajlar alinabiliyor.

DLL i de programla birlikte dagitmak cozum olabilir ancak lisans problemi yasanabilir. Bunun yerine dllden kullanilan fonksiyonlari dogrudan exe icine gommek mumkunmudur?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Digimensch

Benim bildigim Delphi zaten bu isi Debug derlemede yapiyor ...
Ayarlardan ama tam hatirlamiyorum uzun zamandir Delphi kullanmiyorum, Release veya Debug Derleme secenegi var.
O seceneklerden Debug yapip ve bir kac yere cengel konuluyordu tam bilemiyorum simdi o zaman exe icine tüm gerekli dosyalar gömülüyordu.

zamzam23

VB de mümkün olduguna göre delphide de mümkündür kanısındayım. VB de derlerken exe içine gömüyorsun dll i. sonra program kurulurken dll leri gereklı yerlere kopyalıyor. kayıtlarını da kodla program acılırken tek bir sefer olmak sartıyla yaptırıyoprsunuz. delphıde de bu sekıldedır.

Burak B

#3
Hocam fonksiyonları gömemezsiniz (teorikte gömülebilir ancak çok zaman alıcı ve yorucu bir iş olduğu söylemeliyim) ama fonksiyonları gömemiyorsanız sizde DLL i gömün. ;) Size lazım olan DLL hangisi bilmiyorum ancak eğer bu dll arkadaşların bahsettiği gibi bir VCL değilse (VCL ise sevgili gerbay' ın bahsettiği husus yeterli olur kanımca.) bu yöntem işinizi görecektir.

En basit örneği;
http://delphi.about.com/od/windowsshellapi/l/aa012103c.htm

Eğer ben zor olanı severim diyorsanız buyrun;
http://www.binary-soft.com/dll2lib/dll2lib.htm

Ayrıca;
Alıntı yapılan: Digimensch - 15 Kasım 2010, 14:12:39
Benim bildigim Delphi zaten bu isi Debug derlemede yapiyor ...
Ayarlardan ama tam hatirlamiyorum uzun zamandir Delphi kullanmiyorum, Release veya Debug Derleme secenegi var.
O seceneklerden Debug yapip ve bir kac yere cengel konuluyordu tam bilemiyorum simdi o zaman exe icine tüm gerekli dosyalar gömülüyordu.

Aslında bu açıklamada yanılgılar var. Teknik detaylarına aşırı giriş yapmadan açıklama gerekirse Debug Modunda derleme yaparken sembolik bilgi olarak ifade ettiğimiz bilgiler EXE dosyasına ve/veya ayrı bir .MAP,.DBG,.TDS, v.b. dosyasına gömülür ve EXE dosyaya da EXE tipine göre bir codeview veya benzeri debug kaydı girilir. Böylece IDE debug yaparken bu bilgilerden faydalanarak zaten elinizde mevcut olan kaynak kodundan asm kodu üzerinde nerde olduğunuzu bulabilir işleyebilir kesme koyabilir v.s. v.s. Yok eğer kendi yazmadığınız bir programa ait EXE ile uğraşıyorsanız kaynak kodunuz yoksa ama EXE debug bilgisi içeriyorsa o zamanda kullandığınız debugger bu bilgiyi kullanarak size kaynak kodu olmasa bile çok yararlı bir bilgi olan sembolik bilgiyi (değişkenler fonksiyon türleri ve parametreleri v.s.v.s. verecektir.) Yani uzun lafın kısası DLL den EXE' ye gömülen birşey yok o dediğiniz işlem statik kütüphanelerde olur(Static .LIB Fonksiyonları içerir). DLL lerin çoğu ise dinamik kütüphaneler kullanır (Yine .LIB Ancak içeriği  sadece DLL'e kısayol içerir). Zaten adından da belli (Dynamic Link Library - DLL) ve DLL leri bir LIB dosyaya ihtiyac duymadanda kullanabilirsiniz ancak bu sefer bunalmıs hocamın bahsettiği gibi sorunlar ortaya çıkar. Umarım bu ufak yazımın bir yararı olmuştur. Gelelim asıl mevzuya Delphi gibi programlama dillerinde ise (Not: VB ile delphi arasında uçurumsal farklılıklar vardır bilginize. Tabi bu apayrı bir mevzu.) VCL ler aslında yukarıda bahsettiğim Static LIB lerin bir türevidir. Borland (Şimdi Codegear) bunlara DCU(Delphi Compiled Unit); BPL(Borland Package Library) uzantılarını vermiş ve kendi formatını oluşturmuştur. Delphi (Veya diğerleri) derleme yaparken eğer tasarı paketleri ile derle seçilmiş ise kullandığınız bu VCL'lerin bpl lerini ayrı tutmak yerine bunların içerisindeki ilgili fonksiyonları sökerek EXE' nize ekler. Böylece programınız fazlalık dış yükten kurtulur ancak bununda istisnaları vardır. Kısaca değinecek olursam eğer kullandığınız bileşen(VCL) harici bir DLL e ihtiyac duyuyorsa bu DLL içerisindeki fonksiyonlar EXE' nize eklenmez. Çünkü bir fonksiyon yanlız değildir aslında bir tohum gibi tek olabileceği gibi bir çınar gibi dallı budaklı olabilir. Siz bir çınarı basitçe toprağından sökebilirmisniz ?

Herkese İyi bayramlar dilerim.
Saygılarımla.




"... a healthy dose of paranoia leads to better systems." Jack Ganssle