DLL içindeki değişkenleri baska forma aktarma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
DLL içindeki değişkenleri baska forma aktarma
Merhabalar
hazırladığım dll dosyasında formlara girilen bilgileri ana forma nasıl gönderip görüntüleyebilirim ?
LOGIN.DLL DEN kulanıcı adını şifresini yazıp onay aldıktan sonra kullanıcı bilgilerini ana forma almasını istiyorum
mesela isim tel adres vs
Örnek
form1 içindeki isim değişkenini form2 deki isim2 değişkenine aktarmak form2.isim2:=form1.isim bu rahatlıkla yapılabiliyor veya tam tersi
ama benim istediğim login.dll yi form1 den çağırıp kullanıcı adı ve şifresini girdikten sonra dll yi serbest bırakırken kullanıcının diğer bilgilerini
mesela adını datadan alıp form1.isim değişkenine aktarsın ?
hazırladığım dll dosyasında formlara girilen bilgileri ana forma nasıl gönderip görüntüleyebilirim ?
LOGIN.DLL DEN kulanıcı adını şifresini yazıp onay aldıktan sonra kullanıcı bilgilerini ana forma almasını istiyorum
mesela isim tel adres vs
Örnek
form1 içindeki isim değişkenini form2 deki isim2 değişkenine aktarmak form2.isim2:=form1.isim bu rahatlıkla yapılabiliyor veya tam tersi
ama benim istediğim login.dll yi form1 den çağırıp kullanıcı adı ve şifresini girdikten sonra dll yi serbest bırakırken kullanıcının diğer bilgilerini
mesela adını datadan alıp form1.isim değişkenine aktarsın ?
Re: DLL içindeki değişkenleri baska forma aktarma
Değişkenlerinizi Global değişken olarak tanımlayıp, ilgili formlarıda uses ile tanıtırsanız. Tanıttığınız herhangi bir formdaki global değişkenlerin tümünü çağırabilirsiniz. Dll çağırdığınız aşamada ilgili formdaki global değişkene değerleri alın daha sonra Dll serbest bırakın. Fikrimi sorarsanız Dll kullanıp böyle bişey yapmanız gereksiz olmuş.
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
Re: DLL içindeki değişkenleri baska forma aktarma
dll üzerinden anaforma veri gönderemedim.
değeri alamadım bir örnek kod vermeniz mümkün mü aceba? dll den ana forma veri çekme?
DLL kullanıp böyle bir şey yapmanız gereksiz olmuş dediniz. tavsiyeniz ne ?
NOT:200 ze yakın form var ve 4 farklı programın ortak kullandıkları modulleri her bir bölüme eklemektense bir defa modulleri derleyip hazırlamak daha mantıklı geldi.
değeri alamadım bir örnek kod vermeniz mümkün mü aceba? dll den ana forma veri çekme?
DLL kullanıp böyle bir şey yapmanız gereksiz olmuş dediniz. tavsiyeniz ne ?
NOT:200 ze yakın form var ve 4 farklı programın ortak kullandıkları modulleri her bir bölüme eklemektense bir defa modulleri derleyip hazırlamak daha mantıklı geldi.
Re: DLL içindeki değişkenleri baska forma aktarma
Böyle bir konu varsa , evet dll kullanmanız iyi olmuş. Ben tek bir proje için demiştim.4 farklı programın ortak kullandıkları
Anladığım kadarıyla, login.dll dosyasındaki prosedür veya fonksiyonunuz şifrenin doğru olup olmadığını kontrol ediyor doğruysa size bir değer döndürüyor olması gerekir. Sizde bu değerleri diğer formlarda kullanmak istiyorsunuz.
Örnek login dll deki topla adında fonksiyonunuz.;
Kod: Tümünü seç
library login_dll;
uses
sysutils,classes;
Function Topla(x,y):integer; export;
begin
topla:=x+y;
end;
Exports
topla
begin
end.
Function topla(x,y:integer):integer;far;external 'login_dll.dll';/// login dll kullanabilmek için tanımladınız..
Ana Formunuzdaki edit içeriside bu bilgiyi aşağıdaki gibi kullanabiliyorsunuz..
edit1.text:= InttoStr(topla(2,10));
Peki problem nerde anlayamadım ? Siz kullanıcı adı şifre bilgilerini veritabanından alıp gösterecekseniz ozamanda DLL dosyasınızdaki fonksiyonunuzu veya değer döndüren prosedürünüzü veritabanından bilgileri çekip göndericek şekilde yazarsanız istediğiniz olacaktır.
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
Re: DLL içindeki değişkenleri baska forma aktarma
problem şu biraz karışık.
örnek veriyorum
formlar1.dll 18 tane form var
xxxxxx.res dosyası mesela asagıdaki gibi
derleyince menuler.dll yi oluşturduk. bu tamam
--------
ana programa gecip logın menüyü çalıştırdık
kodları
sorun burda işte, şimdi kuldenetle yi çalıştırıyoruz login menusunu açıyor, id ve parola onayı aldı ve logingirişini kapattı
benim sorunum, mantık hatası yapıyor olmam, aklım karıştı. login girişi yapılıyorken kullanıcı kimlikkodunu GETIR function Aktardım
olmadı bir yere yükleyip burdan ana forma aktarmam lazım
umarım anatabilmişimdir.
örnek veriyorum
formlar1.dll 18 tane form var
xxxxxx.res dosyası mesela asagıdaki gibi
Kod: Tümünü seç
Library MENULER;
uses
Forms,
logi in 'logi.pas' {LOGINGIRISI},
AYAR1 in '..\AYARLAR\AYAR1.pas' {AYARLAR};
........
{$R *.res}
procedure kuldenetle;export;
begin
LOGINGIRISI:=TLOGINGIRISI.Create(LOGINGIRISI);
LOGINGIRISI.ShowModal;
LOGINGIRISI.Close;
LOGINGIRISI.Free;
end;
....
....
EXPORTS KULDENETLE,..... ....... , .........;
.......
begin
end.
--------
ana programa gecip logın menüyü çalıştırdık
kodları
Kod: Tümünü seç
....
....
....
procedure KULDENETLE;external 'DLLAPP\MENULER.dll';
Function GETIR:integer;far;external 'DLLAPP\MENULER.dll'; (bu foksiyonda login girişi formunda)
procedure TANAFORM.loginlerkontrol(Sender: TObject);
begin
KULDENETLE;
xxxx1.CAPTION:= InttoStr(GETIR);
end;
....
...
benim sorunum, mantık hatası yapıyor olmam, aklım karıştı. login girişi yapılıyorken kullanıcı kimlikkodunu GETIR function Aktardım
olmadı bir yere yükleyip burdan ana forma aktarmam lazım
umarım anatabilmişimdir.
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
Re: DLL içindeki değişkenleri baska forma aktarma
Kısaca dll içine gömülü formlardan ana programa değer göndermek veya almak itiyorum bunu bir ini dosyası ilede yapmak mümkün ama benim istediğim
ini dosyası kullanmadan yapmak
varsa bir örnekte ekliyebilirseniz çok daha iyi olur
ini dosyası kullanmadan yapmak
varsa bir örnekte ekliyebilirseniz çok daha iyi olur
Re: DLL içindeki değişkenleri baska forma aktarma
Eğer yanlış anlamadıysam ,
Ana formunun en üstünde implementation üstünde var diye bir tanımlama vardır , oraya birtane tutulan bilgi:integer diye değişken tanımla.
Dersen getir fonksiyonundan dönen değer ana formdaki tutulan bilgiye aktarılır ve form kapatılana kadar bu bilgi orada sabit kalır. Böylece anaformda ne zaman istersen çağırır o bilgiye ulaşırsın.
Ana formunun en üstünde implementation üstünde var diye bir tanımlama vardır , oraya birtane tutulan bilgi:integer diye değişken tanımla.
Kod: Tümünü seç
procedure TANAFORM.loginlerkontrol(Sender: TObject);
begin
KULDENETLE;
TUTULAN_BILGI:= GETIR;
end;
Re: DLL içindeki değişkenleri baska forma aktarma
Merhaba,MiskinComez yazdı:problem şu biraz karışık.
örnek veriyorum
formlar1.dll 18 tane form var
xxxxxx.res dosyası mesela asagıdaki gibiderleyince menuler.dll yi oluşturduk. bu tamamKod: Tümünü seç
Library MENULER; uses Forms, logi in 'logi.pas' {LOGINGIRISI}, AYAR1 in '..\AYARLAR\AYAR1.pas' {AYARLAR}; ........ {$R *.res} procedure kuldenetle;export; begin LOGINGIRISI:=TLOGINGIRISI.Create(LOGINGIRISI); LOGINGIRISI.ShowModal; LOGINGIRISI.Close; LOGINGIRISI.Free; end; .... .... EXPORTS KULDENETLE,..... ....... , .........; ....... begin end.
--------
ana programa gecip logın menüyü çalıştırdık
kodları
sorun burda işte, şimdi kuldenetle yi çalıştırıyoruz login menusunu açıyor, id ve parola onayı aldı ve logingirişini kapattıKod: Tümünü seç
.... .... .... procedure KULDENETLE;external 'DLLAPP\MENULER.dll'; Function GETIR:integer;far;external 'DLLAPP\MENULER.dll'; (bu foksiyonda login girişi formunda) procedure TANAFORM.loginlerkontrol(Sender: TObject); begin KULDENETLE; xxxx1.CAPTION:= InttoStr(GETIR); end; .... ...
benim sorunum, mantık hatası yapıyor olmam, aklım karıştı. login girişi yapılıyorken kullanıcı kimlikkodunu GETIR function Aktardım
olmadı bir yere yükleyip burdan ana forma aktarmam lazım
umarım anatabilmişimdir.
DLL içindeki prosedür tanımını değiştirerek istediğinizi elte etmeniz mümkün olabilir. Aşağıdaki örnek DLL Delphi ile hazırlanmış ve DLL Delphi uygulaması tarafından kullanılıyor varsayımı ile verilmiştir.
Kod: Tümünü seç
procedure KulDenetle(out Kullanici, Sifre: string; out LoggedIn: Boolean);export;
begin
LOGINGIRISI:=TLOGINGIRISI.Create(LOGINGIRISI);
LOGINGIRISI.ShowModal();
Kullanici := LOGINGIRISI.EditKullanici.Text;
Sifre := LOGINGIRISI.EditSifre.Text;
// LOGINGIRISI.Close(); // ShowModal() kapandığı zaman zaten formun Close() olmuş olması gerekir. Dolayısıyla bu satıra gerek olmaması lazım.
LOGINGIRISI.Free();
end;
TLoginGirisi formu içinde tamam butonuna basıldığı zaman ModalResult := True kodu kullanılır. İptal veya Kapat butonuna basıldığı zaman ModalResult := mrCancel kodu kullanılır.
Kod: Tümünü seç
procedure KulDenetle(out Kullanici, Sifre: string; out LoggedIn: Boolean); export;
begin
LOGINGIRISI:=TLOGINGIRISI.Create(LOGINGIRISI);
try // Hafıza kaçağı olmaması için try..finally..end bloğu içine aldık
if LOGINGIRISI.ShowModal() = mrOK then
begin
Kullanici := LOGINGIRISI.EditKullanici.Text;
Sifre := LOGINGIRISI.EditSifre.Text;
LoggedIn := True;
end
else
begin
Kullanici := EmptyStr;
Sifre := EmptyStr;
LoggedIn := False;
end;
finally
LOGINGIRISI.Free();
end;
end;
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
Re: DLL içindeki değişkenleri baska forma aktarma
beynim sulandı resmen vermiş olduğunuz iki seçeneği de yapmama rağmen olmadı.
dll yi calıştırınca reset çekiyor bilgisayar veya kitliyor.
sizden ricam karşılaştırmak için örnek bir tane hazırlayıp gönderebilirmisiniz nerede hata yaptığımı farketmem için
örnek adında dosya ek tedir
http://www.dosyaupload.com/4Gx0
dll yi calıştırınca reset çekiyor bilgisayar veya kitliyor.
sizden ricam karşılaştırmak için örnek bir tane hazırlayıp gönderebilirmisiniz nerede hata yaptığımı farketmem için
örnek adında dosya ek tedir
http://www.dosyaupload.com/4Gx0
Re: DLL içindeki değişkenleri baska forma aktarma
Gönderdiğiniz örnek içinde DLL projesi yok. Her ikisi de Win32 uygulaması. DLL projesini de paylaşabilir misiniz?
DLL projesi içinde LOGINGIRISI formu ve derlenebilmesi için gerekli diğer formlar da olmalı.
DLL projesi içinde LOGINGIRISI formu ve derlenebilmesi için gerekli diğer formlar da olmalı.
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
Re: DLL içindeki değişkenleri baska forma aktarma
aslında DLL projesi içinde sadece dll ye cevirmedim.
DLLFORMLAR Klasörünün altındaki DLLFORMLAR.RES dosyasını
açıp aşagıdaki kodlar yerine dll kodları yazıp derlemek mümkün
program testi için
programda değişiklik yapıp sonucta calıştığını uygun görürseniz
dll ye cevirmek için program modunda bırakmıstım
dll modu için DLLFORMLAR Klasörünün altındaki DLLFORMLAR.RES dosyasının içine aşagıdaki kodları yazın
ana menuden yani cağırmaya calıştığım form1 ve form2 yi kodlarına ihtiyac varsa onlarıda ana form başlıgında vereyim
DLLFORMLAR Klasörünün altındaki DLLFORMLAR.RES dosyasını
açıp aşagıdaki kodlar yerine dll kodları yazıp derlemek mümkün
program testi için
Kod: Tümünü seç
program DLLFORMLAR;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
dll ye cevirmek için program modunda bırakmıstım
dll modu için DLLFORMLAR Klasörünün altındaki DLLFORMLAR.RES dosyasının içine aşagıdaki kodları yazın
Kod: Tümünü seç
library DLLFORMLAR;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
procedure form1ac;export;
begin
form1:=Tform1.Create(form1);
form1.ShowModal;
form1.Free;
end;
procedure form2ac;export;
begin
form2:=Tform2.Create(form2);
form2.ShowModal;
form2.Free;
end;
EXPORTS form1ac,form2ac;
begin
end.
En son MiskinComez tarafından 30 Nis 2017 12:02 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
Re: DLL içindeki değişkenleri baska forma aktarma
login girişi formuna ve diğer moduller ri ne yazıkkı atamıyorum koplike bir sistem olduğundan moduller karmaşık.
Benim sizden veya sizlerlerden ricam
dll formunun içindeki form1 içindeki edit1.text ana forma aktarsın veya ana formdan dll içindeki form1 deki herhangi bir edite atsın;
bu kadar.
karşılaştırma yapmak açısından
Benim sizden veya sizlerlerden ricam
dll formunun içindeki form1 içindeki edit1.text ana forma aktarsın veya ana formdan dll içindeki form1 deki herhangi bir edite atsın;
bu kadar.
karşılaştırma yapmak açısından
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
Re: DLL içindeki değişkenleri baska forma aktarma
Destek verecek yok sanırım
-
- Üye
- Mesajlar: 19
- Kayıt: 29 Nis 2014 04:40
Re: DLL içindeki değişkenleri baska forma aktarma
Böyle bir sorunla kimse karşılaşmamışmı.
Yapılamaz diyorsanızda en azından uğraşmam program modullerimi ona göre değiştiririm.
sorum : ana form dll dosyası içindeki formlara bilgi göndersin alsın
Yapılamaz diyorsanızda en azından uğraşmam program modullerimi ona göre değiştiririm.
sorum : ana form dll dosyası içindeki formlara bilgi göndersin alsın

Re: DLL içindeki değişkenleri baska forma aktarma
Merhaba,
Yapmak istediğiniz işlemin internette oldukça fazla örneği mevcut.
DLL içindeki farklı formlara bilgi göndermek ve almak için çok yüksek ihtimal ile DLL içinde de hafıza kullanımı gerçekleşecektir. En basit örnek Login formu içine girilen kullanıcı adı ve şifre bilgileri hafıza kullanan string türünde bilgilerdir. Bu bilgileri Ana uygulamaya gönderdiğiniz zaman DLL içinde hafıza kullanımı gerçekleşip, ana uygulama içinde bu hafıza boşaltılacaktır.
Böyle bir durumda hem DLL hemde Delphi uygulamasında ilk ünite olarak "ShareMem" (paylaşılan hafıza) kullanılmalıdır. Aksi halde en basit hata olarak hafıza kaçakları oluşur.
Basit olarak DLL içinde Login form olan ve farklı bir uygulamadan bu login form içindeki bilgileri okuyan ve kullanan örnek uygulama ve DLL proje kodlarını aşağıdaki bağlantıdan indirebilirsiniz.
dll_form_call.7z
NOT: Örnekler Delphi 10.2 Tokyo ile çalışır şekilde düzenlenmiştir. Ancak Delphi 7 ile büyük ölçüde uyumludur.
NOT2: DLL dosyası sadece Delphi uygulamasına özel hazırlanmıştır. .NET veya C/C++ ile kullanımı için özel ayarlar gerekmektedir.
Yapmak istediğiniz işlemin internette oldukça fazla örneği mevcut.
DLL içindeki farklı formlara bilgi göndermek ve almak için çok yüksek ihtimal ile DLL içinde de hafıza kullanımı gerçekleşecektir. En basit örnek Login formu içine girilen kullanıcı adı ve şifre bilgileri hafıza kullanan string türünde bilgilerdir. Bu bilgileri Ana uygulamaya gönderdiğiniz zaman DLL içinde hafıza kullanımı gerçekleşip, ana uygulama içinde bu hafıza boşaltılacaktır.
Böyle bir durumda hem DLL hemde Delphi uygulamasında ilk ünite olarak "ShareMem" (paylaşılan hafıza) kullanılmalıdır. Aksi halde en basit hata olarak hafıza kaçakları oluşur.
Basit olarak DLL içinde Login form olan ve farklı bir uygulamadan bu login form içindeki bilgileri okuyan ve kullanan örnek uygulama ve DLL proje kodlarını aşağıdaki bağlantıdan indirebilirsiniz.
dll_form_call.7z
NOT: Örnekler Delphi 10.2 Tokyo ile çalışır şekilde düzenlenmiştir. Ancak Delphi 7 ile büyük ölçüde uyumludur.
NOT2: DLL dosyası sadece Delphi uygulamasına özel hazırlanmıştır. .NET veya C/C++ ile kullanımı için özel ayarlar gerekmektedir.