Dll Okuma Hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Dll Okuma Hatası

Mesaj gönderen CiTiZEN »

Slmlar arkadaşlar benim sorum şöyle:dll dosyası ile yazarken mesela bir .ini dosyasına yazabiliyorum kodlar aşagıda

Kod: Tümünü seç

procedure cfieldname(cf1:ansistring);export;
begin
   INIDosya := TIniFile.Create('C:\Program Files\deneme.ini');
   INIDosya.WriteString('deneme1','deneme',cf1);
   INIDosya.Free;
end;
exports
cfieldname;
fakar bunları okurken hata alıyorum showmessage ile okuyabiliyorum ama bir edit veya label a yükleyemiyorum o kodlarda aşagıda:

Kod: Tümünü seç

procedure showmesaj(cfn1:String);export;
var
INIdosya:TIniFile;
begin
   INIDosya:= TIniFile.Create('C:\Program Files\deneme.ini');
   cfn1:= INIDosya.ReadString('deneme1','deneme','');
   ShowMessage(cfn1);
   INIDosya.Free;
end;
exports
showmesaj;
cfn1 isimli değişkeni dll den alıp formda showmesaj dediğimde görebiliyorum ama label a veya edit e aktaramıyorum yardımcı olursanız sevinirim kolay gelsin.
UWESIS CORPORATION
Master43
Üye
Mesajlar: 73
Kayıt: 17 Ara 2004 12:05

Re: Dll Okuma Hatası

Mesaj gönderen Master43 »

var parametresi ekleyerek yeniden denermisiniz,

Kod: Tümünü seç

procedure showmesaj(var cfn1:String);export;
var
INIdosya:TIniFile;
begin
   INIDosya:= TIniFile.Create('C:\Program Files\deneme.ini');
   cfn1:= INIDosya.ReadString('deneme1','deneme','');
   ShowMessage(cfn1);
   INIDosya.Free;
end;
exports
showmesaj;
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Okuma Hatası

Mesaj gönderen CiTiZEN »

Hocam ilginiz için tşkler ama showmessage ile gorebiliyorum fakat

Kod: Tümünü seç

begin
   INIDosya:= TIniFile.Create('C:\Program Files\deneme.ini');
   cfn1:= INIDosya.ReadString('deneme1','deneme','');
   form1.label1.caption:=cfn1
   INIDosya.Free;
end;
exports
showmesaj;
dll de kodu boyle tanımlıyorum programda ise

Kod: Tümünü seç

procedure showmesaj(cfn1:String);far;external'deneme.dll';
procedure TForm2.Button14Click(Sender: TObject);
var cfn1,cfn87:string;
begin
form1.label1.caption:=cfn1;
dediğimde hata alıyorum bunun başka yontemi varmı,kolay gelsin
UWESIS CORPORATION
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Okuma Hatası

Mesaj gönderen CiTiZEN »

dediğiniz şekilde de yaptım hata almadım fakar ini dosyasının içeriğini label da goremedim butona bastığım anda label başlıgı bomboş oluyor.
UWESIS CORPORATION
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Re: Dll Okuma Hatası

Mesaj gönderen undefined »

Dll'den string kullanmak için sharemem unitini eklemen gerekli.
viewtopic.php?f=2&t=13767&hilit=sharemem
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Okuma Hatası

Mesaj gönderen CiTiZEN »

evet hocam 'var' ve sharemem ekleyerek bi kısmını hallettim dll deki kod şu

Kod: Tümünü seç

procedure showmesaj(var cfn1:String);export;
var
INIdosya:TIniFile;
begin
   INIDosya:= TIniFile.Create('C:\Program Files\deneme.ini');
   cfn1:= INIDosya.ReadString('deneme1','deneme','');
   //showmessage(cfn1);
   INIDosya.Free;
   end;
exports
showmesaj;
bu da .exe içindeki kod

Kod: Tümünü seç

procedure showmesaj(var cfn1:String);far;external'deneme.dll';
procedure TForm2.Button14Click(Sender: TObject);
var cfn1:string;
begin
showmesaj(cfn1);
Label14.Caption:=cfn1;
burdaki sorun şu dll de eger showmessage blogunu aktif edersem yanı başındaki // kaldırırsam programda butona basınca ilk ini içerisindeki bilgi gosteriliyor sonra label a yazılıyor ama showmessage başına // koyup pasif hale getirirsem invalid pointer operation die bi hata verdikten sonra label a yazılıyor bunu çözemedim :(
UWESIS CORPORATION
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Dll Okuma Hatası

Mesaj gönderen adelphiforumz »

Merhabalar
fonksiyonları kullanırken tanımlamalarını pchar olarak yaparsan sorunun çözülecektir diye düşünüyorum
birde dll kullanımlarında bildiğim kadarı ile fonksiyonları çağırırken kullanılan parametrelere dikkat etmen gerekiyor
cdec, stdcall, safecall gibi ifadeler işin çalışmasını ve parametrelerin dönüş değerlerini değiştiriyor.

birde delphiden "Calling conventions" olarak helpi incelersen birazdaha sana yardımcı olur düşüncesindeyim.

örneğin
dll'i çağıdan programda
function FONKSIYONADI (id:LongInt):PChar; cdecl; External DLLADI name 'DLLICINDEKIADI';
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Okuma Hatası

Mesaj gönderen CiTiZEN »

evet hocam birazdan bu dedıklerinizide tanımlayacagım tşkler
UWESIS CORPORATION
Master43
Üye
Mesajlar: 73
Kayıt: 17 Ara 2004 12:05

Re: Dll Okuma Hatası

Mesaj gönderen Master43 »

Delphi2007'de sorunsuz çalışıyor hata falan da vermiyor geriye sorunsuz bir şekilde değeri döndürüyor.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Dll Okuma Hatası

Mesaj gönderen adelphiforumz »

anladığım kadarı ile sorun çözülmüş.
çalışan örneği forumda paylaşırsan buna benzer sorunları yaşayanlarında işine yaramış olur.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Master43
Üye
Mesajlar: 73
Kayıt: 17 Ara 2004 12:05

Re: Dll Okuma Hatası

Mesaj gönderen Master43 »

@CiTiZEN in kodlarını yazdım ve derledim çalıştı yani sorun yok. Sanırım Delphi2007'de sorun vermiyor onu paylaşmak istedim. Benim yazdığım ekstra bir kod yok, Borland yapmış bişiler heralde.
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Okuma Hatası

Mesaj gönderen CiTiZEN »

hocam birazcık işim vardı fakat geldim kodları deneyeceğim çalışınca elbette burda yayınlayacağım lütfen kusura bakmayın
hepinize ayrı ayrı teşekkür ederim ilginiz için kolay gelsin.
UWESIS CORPORATION
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Okuma Hatası

Mesaj gönderen CiTiZEN »

.Dll deki kodlar

Kod: Tümünü seç

uses
  SysUtils,
  Classes,
  system,
  dialogs,
  sharemem,
  StdCtrls,
  messages,
  windows,
  inifiles,
  unit1 in 'unit1.pas' {form1};

procedure readini(var ini2:String);export;
var
INIdosya:Tinifile;
begin
   INIDosya:= TIniFile.Create('C:\Deneme\Sistem.ini');
   ini2:= INIDosya.ReadString('Ayarlar','Kullanıcı Adı','');
   INIDosya.Free;
   end;
   exports
   readini;
ve .exe deki kodlar

Kod: Tümünü seç

procedure readini(var ini2:String);far;external'deneme.dll';
procedure TForm1.Button2Click(Sender: TObject);
var ini2:string;
begin
readini(ini2);
edit1.Text:=ini2;
end;
okurken sorun yok istediğim gibi ama porgram kapanırken acces voilation hatası veriyo ve bunu sürekli tekrarlıyor yapmam gereken bişeyimi unutuyorum yoksa tanımlamalarımda hata felan mı var çözemedim.hata verdikce f9 a basıyorum asm kodları felan çıkıo ortamaya sonra terminate ediyorum kapanıyo:(
UWESIS CORPORATION
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Okuma Hatası

Mesaj gönderen CiTiZEN »

Aldığım Son hata mesajı
okuma işlemi yapılmadan once bu mesaj çıkıyor sonra tekrar çalıştırınca okuyor mesajın içeriği:
Project project2.exe raised exception class EInvalid Pointer with message 'Invalid poienter operation' proccess stopped.Use Step or Run to continue.
bilinmıyo dior ama harici hiçbişey tanımlamadım kı kodlar aşagıda

.Dll kodları:

Kod: Tümünü seç

procedure readini(var ini2:AnsiString);export;
Var
INIDosya : TIniFile;
 Begin
   INIDosya := TIniFile.Create('C:\deneme\sistem.ini');
   ini2:= INIDosya.ReadString('Ayarlar','Kullanıcı Adı','');
   INIDosya.Free;
   end;
   exports
   readini;
Bu Da .exe içerisindeki kod

Kod: Tümünü seç

procedure readini(var ini2:AnsiString);far;external'deneme.dll';
procedure TForm1.Button2Click(Sender: TObject);
var
inioku:AnsiString;
begin
readini(inioku);
edit1.Text:=inioku;
end;
egerki dll içerisine bir showmessage(ini2)dersem kod sorunsuz çalışıyor ilk once ini mesaj olarak gosteriliyor daha sonra editte gösteriliyor zamanlama hatası felan mı yapıyorum.
Yardımlarınız için teşekkürler.
UWESIS CORPORATION
Kullanıcı avatarı
turkerunutmaz
Üye
Mesajlar: 57
Kayıt: 04 Oca 2008 04:53
Konum: İstanbul
İletişim:

Re: Dll Okuma Hatası

Mesaj gönderen turkerunutmaz »

string tanımlamalarını pchar olarak değiştir öyle dene.
Cevapla