ADO Connection ı DLL içinden kullanabilme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ardahan
Üye
Mesajlar: 144
Kayıt: 26 Oca 2004 05:17
Konum: İstanbul - Kocaeli - Ardahan
İletişim:

ADO Connection ı DLL içinden kullanabilme

Mesaj gönderen ardahan »

Merhaba

Ana formumdan çağıracağım DLL ler de anaformdaki ADO connectionın kullanılmasını istiyorum. Bunun içinde bir iki araştırma yaptım. Fakat tatmin edici bir şey bulamadım. CoInitilaze yapılmasından falan bahsedilmiş ama nasıl yapacağımı bilmiyorum. + DLL leri run-time (ya bunun doğrusu ne runtime mı run time mı run-time mı? :)) esnasında dinamik olarak nasıl load edip iş bittikten sonra hafızadan boşaltabilirim.

Uzun bir cevabı olan bir şey olduğunu biliyorum kusura bakmayın :(

Eğer elinde örnek proje olan olursa bana mrardahan@yahoo.com adresinden mailleyebilir mi?

İyi çalışmalar
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selamlar...

- Aynı ADOConnection'u kullanmak neden gerekli acaba, DLL'ye ConnectionString için gerekli parametreleri (dosyaadi, sifre vs.)gönderip, DLL içindeki fonksiyonda create edilip free edilecek bir AdoConnection işinizi görmez mi ?

- Library'yi yükleme şeklini yazarsan daha yardımcı olabiliriz... Yani statik bir şekilde mi yoksa program içinde lazım olduğunda dinamik bir şekilde mi çağırmaktasın...

- Şöyle bir yöntem izliyorsan statik yükleme yapıyorsun demektir.

Kod: Tümünü seç

function ArmanFunction; external 'arman.dll';
- Dinamik bir yükleme, yani lazım olduğunda yüklensin, istendiğinde kaldırılsın istiyorsanız, programın her yerinden ulaşabileceğiniz değişken türü olan Global değişken tanımlar, DLL yüklerken Windows tarafından verilecek Handle numarasını yüklemeyi takiben bu değişkene aktarırsınız. Sonra da FreeLibrary fonksiyonu ile bu Handle no'yu gösterebilir ve hafızadan silebilirsiniz.

- Sizin için buna örnek bir kod hazırladım...

Kod: Tümünü seç

Const
  ArmanDLLAdi = 'D:\Delphi\ARMAN.DLL';
Var
  ArmanDLL : THandle;

function LoadArmanDLL: Boolean;
begin
  // Önce DLL yüklenmiş mi kontrolü
  if (ArmanDLL <> 0) then
     // DLL Zaten Yüklenmiş....
     result:=True
  else
  begin
     // DLL Yüklemeye başlıyoruz...
     ArmanDLL:=LoadLibrary(ArmanDLLAdi);
     // Yükleme durumuna bakıyoruz, belki yüklenememiştir...
     if (ArmanDLL = 0)
       then result := False // Yükleme Başarısız..
       else result := True; // Yükleme Başarılı..
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //Fonksiyonumuzun kullanılışı...
  If LoadArmanDLL Then ShowMessage('DLL Başarıyla Yüklendi')
                  else ShowMessage('DLL Bulunamadı/Yüklenemedi');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  If ArmanDLL <> 0 then
  begin
    FreeLibrary(ArmanDLL);
    ArmanDLL := 0;
    ShowMessage('DLL Başarıyla Temizlendi');
  end
  else ShowMessage('DLL Yüklenmemiş');
end;
Resim
Resim ....Resim
Cevapla