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ı...
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
  C Dll indeki Callback Nasıl Çevrilir? (Çözüldü) erkankurtaga 13 780 15-04-2018, Saat: 22:11
Son Yorum: ilgazinho
  RSA Encrypt (Çözüldü) yhackup 4 164 05-04-2018, Saat: 11:50
Son Yorum: yhackup
  Form Print gonulali 2 154 03-04-2018, Saat: 23:30
Son Yorum: gonulali
  [ÇÖZÜLDÜ] Google Calendar API Server tipi Erişim Metodu hakkında tecrübesi olan mrmarman 38 943 26-03-2018, Saat: 10:22
Son Yorum: klavye
  MDI FORM narkotik 1 145 18-03-2018, Saat: 13:28
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi