Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Form create h.k (Çözüldü )
#1
İyi günler 

Giris Formu otomatik oluşturuluyor 
Kalan tüm formlar create yapılıyor.
cal_yol adlı değişken formun public bölümünde tanımlı

Program derleniyor ve çalışıyor.

Delphi Tokyo da  programı test etmek için programın ihtiyacı olan dosyaların adını değiştirdim.
Derliyor çalıştırınca resimdeki hatayı veriyor
dll adını düzeltim sadece database.ini adını değiştirince 
program direk halt komutunu çalıştırıyor  kapanıyor.
aradaki showmessage mesajları çıkmıyor.
Tüm dcu ve program tarafından derleme sırasında oluşturulan dosyaları sildim.
Gözümden kaçan bir hata mı var.

uses
 ComCtrls, StdCtrls, ExtCtrls, Winapi.Windows, Winapi.Messages,System.SysUtils, System.Variants,
 System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, shellapi, Vcl.Themes,
 Vcl.DBCtrls,IniFiles, Jpeg, pngimage, GIFImg, dxGDIPlusClasses, cxGraphics, cxControls, cxLookAndFeels,
 cxLookAndFeelPainters, dxStatusBar, dxSkinsCore, dxSkinsdxStatusBarPainter;


procedure Tgiris_frm.FormCreate(Sender: TObject);
var
 VolumeSerialNumber: dword;
 MaximumComponentLength: dword;
 FileSystemFlags: dword;
 SerialNumber: ansistring;
 ini: TIniFile;
 mesaj,s: string;
begin
   cal_yol := ExtractFilePath(ParamStr(0));
   if not fileexists(cal_yol+'Cnr.dll') then
   begin
   ShowMessage(cal_yol+'Cnr.Dll dosyası bulunamadı.');
   giris_frm.Close;
   end;
    //database adını almak için ini dosyası okunuyor
 if fileexists(cal_yol + '\DATABASE.ini') then
 begin  // ini dosyası var
   ini := TIniFile.Create(cal_yol+'\DATABASE.ini');
   try
     Database_adi:= ini.ReadString('Data_Name', 'DATABASE_NAME', 'Hata'); // bu satir ini içindeki database adını alır.
   finally
     ini.Free;
   end;
 end
 else
 begin
   mesaj := cal_yol+'\Database.ini'+' dosyası bulunamadı. Program kapatılacak.';
   Application.MessageBox(Pwidechar(mesaj), 'Uyarı', MB_OK + MB_ICONWARNING);
   Halt;
 end;


Ek Dosyalar Resimler
   
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#2
öncelikle ExtractFilePath(ParamStr(0)) fonksiyonu sana
sonu "\" ile biten bir yol verir bu nedenle birleştirmelere dikkat etmen lazım.
kodu çalıştırınca ben bir sorun görmedim herşey olması gereken gibi görünüyor
yukarıdaki uyarımı dikkate alarak tekrar bir gözden geçirmende fayda var
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#3
Cevabınız için teşekkür ederim.
Ama aşağıdaki showmessage komutuda çalışmıyor
cal_yol := ExtractFilePath(ParamStr(0));
   showmessage(cal_yol);
   if not fileexists(ParamStr(0)+'Cnr.dll') then
   begin
   ShowMessage(cal_yol+'Cnr.Dll dosyası bulunamadı.');
   giris_frm.Close;
   end;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#4
.EXE hangi klasörde ise Cnr.DLL'de aynı klasörde olmalı...
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol,Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol,Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol,Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol / Neyi bilmediğimiz hakkında hiçbir fikrimiz yok (EM)
Cevapla
#5
ExtractFilePath(ParamStr(0)) yerine ExtractFilePath(Application.ExeName) kullanmayı deneyebilirsin.
WWW
Cevapla
#6
Cevaplar için çok teşekkür ederim.

Sayın Uparlayanupa
.EXE hangi klasörde ise Cnr.DLL'de aynı klasörde olmalı...

Dikkatinizden kaçmış olmalı. bilerek cnr.dll dosyasının adını değiştiriyorum oncreate olayında kontrolleri
yapıyor  showmessage ve Application.MessageBox  mesajlarını ekrana yazmıyor.

cal_yol := ExtractFilePath(ParamStr(0));    showmessage(cal_yol);

bu kodlar normal çalışıyor
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#7
Uygulamanız içinde ilgili DLL içinden çağrım yapmanızı sağlayacak metod tanımları mevcut mu ? Aşağıdaki gibi bir tanım mevcut ise ve DLL'de bulunamıyor ise, başlangıç zamanı hataları almanız çok normal.

procedure OrnekMetod; external 'BenimDLL.dll'
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#8
(24-01-2018, Saat: 23:37)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlUygulamanız içinde ilgili DLL içinden çağrım yapmanızı sağlayacak metod tanımları mevcut mu ? Aşağıdaki gibi bir tanım mevcut ise ve DLL'de bulunamıyor ise, başlangıç zamanı hataları almanız çok normal.

procedure OrnekMetod; external 'BenimDLL.dll'

İlginiz için teşekkür ederim evet kullanılan tüm foksiyonlar ve procedure  ekli.
 
 function caps_lock:boolean;external 'Cnr.dll';
  function num_lock:boolean;external 'Cnr.dll';
 function ins_lock:boolean;external 'Cnr.dll';
 function Encrypt(const S: AnsiString; Key: Word): AnsiString; external 'Cnr.dll';
 function Decrypt(const S: AnsiString; Key: Word): AnsiString; external 'Cnr.dll';
 function makina_kodu:Longint; external 'Cnr.dll';
 function seri_kodu:Longint; external 'Cnr.dll';

Ben sorunumu anlatamadım.
Program da tüm bölümler eksiksiz çalışıyor.
Programın ilk açılışında ihtiyaç duyulan dosyalar var mı diye kontrol etmek istemekle birlikte
Ana formun oncreate bölümündeki showmessage ve mesaj uyarıları çıkmadı.
Sorun dll çağrılmasında veya derlemesinde olduğunu tespit ettim.
DLL dosyayı unit (cnr.pas) olarak düzenledim. tüm fonksiyonlar ve  showmessage ve mesaj uyarıları düzgün çalıştı.
İlk mesajımdaki resimde Dll bulunamadı uyarısını kesinlikle ben eklemedim bu derleme sonucu  delphi tarafından oluşturuluyor.
DLL olarak çalıştırarak sorunu çözmek gerek dll nin derleme opsiyonları hakkında bilgi araştırıyorum
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#9
(25-01-2018, Saat: 10:19)cinarbil Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(24-01-2018, Saat: 23:37)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlUygulamanız içinde ilgili DLL içinden çağrım yapmanızı sağlayacak metod tanımları mevcut mu ? Aşağıdaki gibi bir tanım mevcut ise ve DLL'de bulunamıyor ise, başlangıç zamanı hataları almanız çok normal.

procedure OrnekMetod; external 'BenimDLL.dll'

İlginiz için teşekkür ederim evet kullanılan tüm foksiyonlar ve procedure  ekli.
 
 function caps_lock:boolean;external 'Cnr.dll';
  function num_lock:boolean;external 'Cnr.dll';
 function ins_lock:boolean;external 'Cnr.dll';
 function Encrypt(const S: AnsiString; Key: Word): AnsiString; external 'Cnr.dll';
 function Decrypt(const S: AnsiString; Key: Word): AnsiString; external 'Cnr.dll';
 function makina_kodu:Longint; external 'Cnr.dll';
 function seri_kodu:Longint; external 'Cnr.dll';

Ben sorunumu anlatamadım.
Program da tüm bölümler eksiksiz çalışıyor.
Programın ilk açılışında ihtiyaç duyulan dosyalar var mı diye kontrol etmek istemekle birlikte
Ana formun oncreate bölümündeki showmessage ve mesaj uyarıları çıkmadı.
Sorun dll çağrılmasında veya derlemesinde olduğunu tespit ettim.
DLL dosyayı unit (cnr.pas) olarak düzenledim. tüm fonksiyonlar ve  showmessage ve mesaj uyarıları düzgün çalıştı.
İlk mesajımdaki resimde Dll bulunamadı uyarısını kesinlikle ben eklemedim bu derleme sonucu  delphi tarafından oluşturuluyor.
DLL olarak çalıştırarak sorunu çözmek gerek dll nin derleme opsiyonları hakkında bilgi araştırıyorum

Sanırım ben de ne demek istediğimi tam anlatamadım. Eğer uygulamanız çalıştırıldığında, ana formunuzun OnCreate olay yöneticisine dahi ulaşamıyor iseniz (-ki koyduğunuz ShowMessage'ların gözükmediğini belirtiyorsunuz); bu durumda genel olarak 2 sorun mevcuttur. Birincisi uygulamanın .dpr dosyasında hataya neden olabilecek bir kod bloğu ya da, genellikle tespit etmesi zor olan benim bahsettiğim husus.

 Cnr.dll'i external direktifi ile uygulamaya bağladığınızda; uygulama çalışır (daha doğru ifade ile PE dosyası hafızaya yüklenir iken)iken bu DLL'e ihtiyaç duyar, bulamadığında da hata verir. Dolayısı ile sizin OnCreate'de DLL varmı yok mu kontrolünün de hiç bir anlamı olmaz.

 Bu bağlamda bir kontrol edin demek istemiştim. Eğer sorun bahsettiğim gibi ise; bu durumda çözüm yolları önerebiliriz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#10
(25-01-2018, Saat: 10:34)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(25-01-2018, Saat: 10:19)cinarbil Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olİlginiz için teşekkür ederim evet kullanılan tüm foksiyonlar ve procedure  ekli.
 
 function caps_lock:boolean;external 'Cnr.dll';
  function num_lock:boolean;external 'Cnr.dll';
 function ins_lock:boolean;external 'Cnr.dll';
 function Encrypt(const S: AnsiString; Key: Word): AnsiString; external 'Cnr.dll';
 function Decrypt(const S: AnsiString; Key: Word): AnsiString; external 'Cnr.dll';
 function makina_kodu:Longint; external 'Cnr.dll';
 function seri_kodu:Longint; external 'Cnr.dll';

Ben sorunumu anlatamadım.
Program da tüm bölümler eksiksiz çalışıyor.
Programın ilk açılışında ihtiyaç duyulan dosyalar var mı diye kontrol etmek istemekle birlikte
Ana formun oncreate bölümündeki showmessage ve mesaj uyarıları çıkmadı.
Sorun dll çağrılmasında veya derlemesinde olduğunu tespit ettim.
DLL dosyayı unit (cnr.pas) olarak düzenledim. tüm fonksiyonlar ve  showmessage ve mesaj uyarıları düzgün çalıştı.
İlk mesajımdaki resimde Dll bulunamadı uyarısını kesinlikle ben eklemedim bu derleme sonucu  delphi tarafından oluşturuluyor.
DLL olarak çalıştırarak sorunu çözmek gerek dll nin derleme opsiyonları hakkında bilgi araştırıyorum

Sanırım ben de ne demek istediğimi tam anlatamadım. Eğer uygulamanız çalıştırıldığında, ana formunuzun OnCreate olay yöneticisine dahi ulaşamıyor iseniz (-ki koyduğunuz ShowMessage'ların gözükmediğini belirtiyorsunuz); bu durumda genel olarak 2 sorun mevcuttur. Birincisi uygulamanın .dpr dosyasında hataya neden olabilecek bir kod bloğu ya da, genellikle tespit etmesi zor olan benim bahsettiğim husus.

 Cnr.dll'i external direktifi ile uygulamaya bağladığınızda; uygulama çalışır (daha doğru ifade ile PE dosyası hafızaya yüklenir iken)iken bu DLL'e ihtiyaç duyar, bulamadığında da hata verir. Dolayısı ile sizin OnCreate'de DLL varmı yok mu kontrolünün de hiç bir anlamı olmaz.

 Bu bağlamda bir kontrol edin demek istemiştim. Eğer sorun bahsettiğim gibi ise; bu durumda çözüm yolları önerebiliriz.

Evet Tuğrul bey 

Cnr.dll'i external direktifi ile uygulamaya bağladığınızda; uygulama çalışır (daha doğru ifade ile PE dosyası hafızaya yüklenir iken)iken bu DLL'e ihtiyaç duyar, bulamadığında da hata verir. Dolayısı ile sizin OnCreate'de DLL varmı yok mu kontrolünün de hiç bir anlamı olmaz.
 
Bu bağlamda bir kontrol edin demek istemiştim. Eğer sorun bahsettiğim gibi ise; bu durumda çözüm yolları önerebiliriz.

Sorunun tam bu
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Datasnap Türkçe karakter sorunu [Çözüldü] hakanharbeli 4 107 11-02-2018, Saat: 03:29
Son Yorum: hakanharbeli
Star ıdHTTP Post hakkında? [Çözüldü] Cyber 1 84 06-02-2018, Saat: 13:36
Son Yorum: Cyber
  thread form donma sorunsalı seci20 3 136 22-01-2018, Saat: 09:42
Son Yorum: edo
  Çalışma anında form tasarımı boreas 4 220 10-01-2018, Saat: 17:10
Son Yorum: boreas
  Wsdl Xml Importer(Çözüldü) yhackup 17 221 09-01-2018, Saat: 15:42
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi