Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
subhan
Üye
Mesajlar: 224
Kayıt: 05 Mar 2008 08:18

Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen subhan »

ben bu dll dosyası ile .ico dosyalarını .bmp yapmaya çalışıyorum neden .dll dosyası
çalışmıyor program çalışdıkdan sonra hata veriyor

Kod: Tümünü seç

library Icon2BMP;


uses
  SysUtils,
  Graphics,
  Classes;

function Icon2BMP(CONST FileName: TFileName):TBitmap;export;
  var
  Icon : TIcon;
  Bitmap : TBitmap;
begin
  Icon := TIcon.Create;
  Bitmap := TBitmap.Create;
  Icon.LoadFromFile(FileName);
  Bitmap.Width := Icon.Width;
  Bitmap.Height := Icon.Height;
  Bitmap.Canvas.Draw(0, 0, Icon );
  Bitmap.Assign(Icon);
  Result:=Bitmap;
  Icon.Free;
  Bitmap.Free;
end;

Exports
Icon2BMP;
{$R *.res}
begin
end


function Icon2BMP(Const FileName:TFileName) :TBitmap;far;external 'C:\New Folder\Icon2BMP.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
a : TBitmap;
begin
a:= Icon2BMP('C:\Q.ico');
a.SaveToFile('C:\d.bmp');
end;
< The Best Boy >
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen CiTiZEN »

Projenin .exe sinde kullandığın kod ile aldığın hatayıda yazarsan daha etkili yardım alabilirsin
UWESIS CORPORATION
mehmetcan
Üye
Mesajlar: 63
Kayıt: 14 Tem 2008 05:19

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen mehmetcan »

Kodu denemedim ama fonksiyonda result tan sonra bitmap i free etme, döndürdügün deger boşalır ve bitmap geçersiz olur. Icon u free edebilirsin, o bir daha kullanılmıyor.
Kullanıcı avatarı
subhan
Üye
Mesajlar: 224
Kayıt: 05 Mar 2008 08:18

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen subhan »

CiTiZEN yazdı:Projenin .exe sinde kullandığın kod ile aldığın hatayıda yazarsan daha etkili yardım alabilirsin
buyur video olarak kayıt etdim
Hatta.rar
(167.99 KiB) 112 kere indirildi
< The Best Boy >
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen CiTiZEN »

mehmetcan yazdı:Kodu denemedim ama fonksiyonda result tan sonra bitmap i free etme, döndürdügün deger boşalır ve bitmap geçersiz olur. Icon u free edebilirsin, o bir daha kullanılmıyor.

Bu öneriyi denediniz mi?
UWESIS CORPORATION
Kullanıcı avatarı
subhan
Üye
Mesajlar: 224
Kayıt: 05 Mar 2008 08:18

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen subhan »

CiTiZEN yazdı:
mehmetcan yazdı:Kodu denemedim ama fonksiyonda result tan sonra bitmap i free etme, döndürdügün deger boşalır ve bitmap geçersiz olur. Icon u free edebilirsin, o bir daha kullanılmıyor.

Bu öneriyi denediniz mi?

evet bunu denedim olmadI

bie zahmet siz deneye bilirmisiniz
< The Best Boy >
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen Z.D. »

Kod: Tümünü seç

  function Icon2BMP(const FileName: TFileName): TBitmap; export;
  var
    Icon:   TIcon;
    Bitmap: TBitmap;
  begin
    Icon   := TIcon.Create;
    Bitmap := TBitmap.Create;
    Icon.LoadFromFile(FileName);
    Bitmap.Width  := Icon.Width;
    Bitmap.Height := Icon.Height;
    Bitmap.Canvas.Draw(0, 0, Icon);
    //  Bitmap.Assign(Icon);
    Result := Bitmap;
    Icon.Free;
    //Bitmap.Free;
  end;
bu şekilde deneyebilirsin
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen sabanakman »

subhan yazdı: Result:=Bitmap;
Icon.Free;
Bitmap.Free;
Result'a verdiğin Bitmap'i yok edersen hata alman son derece normal. Yok edilen nesneleri daha sonra kullanamazsın.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen ikutluay »

sabanakman yazdı:
subhan yazdı: Result:=Bitmap;
Icon.Free;
Bitmap.Free;
Result'a verdiğin Bitmap'i yok edersen hata alman son derece normal. Yok edilen nesneleri daha sonra kullanamazsın.
Bu iyi DLL ile yapmanında ne kadar gerekli olduğu tartışılır. harici bir dll olsa tamam diyeceğim ama bu konu biraz fantaziye kaçmış sanki. sonuçta hazır libarary varsa bunu unit yapmanın neresi sakıncalı.

ben kendi şahsımda barkod, port vs cihazlar gerektirmedikçe işimi DLL olmadan çözme taraftarıyım.

hataya gelince zaten DLL den değil kod mantığından görünmekte ... şaban üstad güzel yakalamış.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen sabanakman »

@Z.D. gereken satırları verdiği kodlarda kırpmış ama @subhan için açıklama yapmak iyi olur diye düşündüm.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Re: Dll Kulanmak İçin Yardımcı Ola Bilirmisiniz

Mesaj gönderen Z.D. »

Evet üstatlar zaten sorunun neden kaynaklandığını belirtmiş, ben çok fırsatçıyım sanırım :) Birde dll kullanılırken dikkat edilmesi gereken nokta veri tipleridir. string yerine pchar veya widestring kullanılabilir, çünkü dönüşümlerde memoryden alınan yerler, dll free edildikten sonra ana programdan adreslenen kısımlar tekrar free edilmeye çalışılır, bu exceptionlara neden oluyor.

neyse iftar oldu, herkese hayırlı ramazanlar :)
Cevapla