Delphi & DLL

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
ersoft
Üye
Mesajlar: 3
Kayıt: 20 Ağu 2004 02:40
Konum: Gaziatep
İletişim:

Delphi & DLL

Mesaj gönderen ersoft »

İlk önce herkese selam (Bu benim ilk mesajım da :) )
Şu sıralar Delphi de DLL yazıp-kullanma ile uğraşıyorum. Takıldığım nokta DLL lerden sadece function ve procedure mü export edilebileceği. Örneğin ;

Kod: Tümünü seç

type
   TAuth = ( athTekser = 1, athUretim = 2);

function CheckAuth(Auth: TAuth): Boolean; stdcall;
begin
 Result := True;
end;

export
 CheckAuth;
 
gibi hazırladığım bir dll içindeki fonksiyonu;

Kod: Tümünü seç

 function CheckAuth(Auth: TAuth): Boolean; stdcall; external 'FIRSTDLL.DLL';
derleyici (haklı olarak) TAuth tanımsız diyerek hata veriyor. Type 'ı export etmeyi de denedim olmadı.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

A.S.
aramıza hoş geldin.
typı dll i çağırdığın projedede tanımlayıp yapabilirsin.
type export u hiç denemedim. ama dll lerde kullandığn type ların standart typler olmasına dikkat etmeni öneririm.
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

TAuth = ( athTekser = 1, athUretim = 2)
tip tanımlamasını dll i kullandıgınız unit icine eklerseniz hicbi sorun cıkmaz
ben parametre olarak dll fonksiyona record ifade aktarmıstım spoorun yoktu.
ama baska programlama dillerinden (delphi ve cbuilder harici) bu dll i kullanırsan tip uyusmazlıgı olabilir.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
ersoft
Üye
Mesajlar: 3
Kayıt: 20 Ağu 2004 02:40
Konum: Gaziatep
İletişim:

Teşekkür

Mesaj gönderen ersoft »

Tip bilgisini her iki unitte(dll ve çağrıldığı yere) de koyulunca ve bunlardan biri diğerinden kazarak değişik olursa Çağrıldığı yerdeki şekli geçerli oldu.
Ama tip türünü farklı bir ünite koyarak ve hem dll in hem de çağrıldığı ünitte bu tip ünitini çağrırsam zannederim bu iş olur.
Herşey için teşekkür.
Saygılar
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

evet dediğin gibi olur ama tipte bir değişiklik yaptığın zaman hem dll i hemde programı yeniden derlemek gerekir. ona göre
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

@ersoft yerinde bir karar bencede, bilmeyen arkadaşlar için bir dip not ekliyeyim
bu tip ortak kullanımlar için pascal zamanından kalan included yani eklenmiş dosya mantığı var
kullanımı compiler direktive ile oluyor
{$I xxx.inc}
inc uzantılı file a path de verilebilinir. bu satırı yazdığınız yere xxx.inc i copy-paste yapmışsınız gibi davranılır. Inc file tek başına anlam ifade etmez. Dolayısı ile eklenecek dosyanın içeriği {$I xxx.inc} ifadesinin yerine konulur. bu direktif en çok component lar içinde define dereative tanımlarını yapmak ve bunuda her bir pas içine koyup uygulamak yerine tek bir yerden yapıp tüm pas file lar içinde kullanılmasını sağlamak için kullanılıyor.

kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
ersoft
Üye
Mesajlar: 3
Kayıt: 20 Ağu 2004 02:40
Konum: Gaziatep
İletişim:

inc kullanımı

Mesaj gönderen ersoft »

Daha önce hiç inc dosyaları kullanmadım. Bunun yerine hep uses den dosyayı çağırmayı seçtim. Bunların bir farkı var mı?
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

tabiki var uses kısmına yazarsanız bu bir unit olarak projene eklenir. ilk satırdan son satıra kadar compile edilip projeye dahil edilir. inc ise

Kod: Tümünü seç

procedure TProperty_FRM.BtnDefaultClick(Sender: TObject);
var I: TNavigateButtons;
  {$I UGSDBNav_TR.inc}
begin
     for i:=low(T)to High(T)do begin
                               TempCaptionId[Ord(I)] := BtnCaptionId[I];
                               TempHi
...............
buda "UGSDBNav_TR.inc" içeriği

Kod: Tümünü seç

  const
  TNavigateButtonsResName :array[TNavigateButtons] of string= (
                         'nb_First',
                         'nb_Prior',
                         'nb_Next',
                         'nb_Last',
                         'nb_Insert',
                         'nb_Delete',
                         'nb_Ed
şöyle düşün alttaki file ı copy-paste ile yukarıdaki {$I UGSDBNav_TR.inc} yerine yapıştırılır. bu işlemi compiler sanal olarak yapar.dosyalarda değişiklik olmaz.
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

demek inc dosyaları bu işe yarıyordu.
teşekkürler freeman35
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

selamu aleyküm

ayni konu üzerine su an ben de calisiyorum. 2 gün dür google ve delphitürkiye haril haril bana calisiyor. Fakat hala sonuca ulasabilmis degilim.

DLL yazdim ve Type göndermeye calisiyorum. arkadasin yapmis oldugu gibi bir unit icerisinde type tanittim ve hem dll dosyasina hem de projeye ekledim, derledim fakat access violation.

daha sonra inc dosyasi ile denedim sonuc yine ayni. access violation.

yaptigim is yalnizca su:

Kod: Tümünü seç

case myType of
deneme: showmessage('basari');
end;
ufacik bir denemede access violation veren bir dll, icine prosedürler ve fonksyonlar geldiginde ne eder tahmin bile edemiyorum :)

type aktarimini basarmanin baska bir yolu var mi?

degerli fikirlerinizi bekliyorum.


selam ve dua ile...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

..access violation...
hatası genelde olmayan veya henüz oluşturulmayan nesnelere ulaşmaya kalkıldığında oluşur.. Oluşturma sırasına bakıp kontrol etmelisiniz :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam sorun da orada zaten :) ben bir sey olusturmuyorum... bütün prosedürü sildim. deneme amacli yalnizca showmessage koydum. sorun cikartmadan msg veriyor fakat type kullaniminda ise yukarida belirttigim sekilde bir ifade kullaniyorum ve hemen access violation veriyor.

hic bir sey create edilmiyor hic bir sey free edilmiyor.

ayni kodu bir unit icerisinde denedim calisiyor. dll icerisinde calismiyor.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
hatayı öncelikle hangi satırda verdiğini bulman lazım.
bunun için dll in run parameters kısmına dll i kullandığın programı ekle.
budan sonra dll de run dediğin zaman seçtiğin program çalışacaktır. dll dede break point koyup adım adım çalıştırırsın.
veya
dll de satır aralarına showmessage koy. hangi mesajdan sonra hata veriyrsa o satırdan sonraki kodları kontrol edersin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

ve aleyküm selam.

hocam ilgin icin tesekkür ederim.
hatayi type kisminda veriyor. ve isin ilginc yani ben bu library i dinamik yükledigimde hata yok. ancak statik yükler isem hata var.

simdi diyeceksin ki statik yüklerken hata yapiyorsun dur veya yüklenmiyor dur. hocam eger tüm prosedürü silersem ve yalnizca showmessage dersem o zaman msg veriyor. bu da demek oluyor ki dll yükleniyor.

cikamadim isin icinden.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

tanımladığın typı create etmen gerekiyor olabilirmi?
tanımlamayı nasıl yaptınki
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla