Dll içerisinde bileşen oluşturmak.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
KarizMan
Üye
Mesajlar: 60
Kayıt: 31 May 2005 09:13

Dll içerisinde bileşen oluşturmak.

Mesaj gönderen KarizMan »

Merhabalar,
Dll içerisinde timer, IdHTTP vs. gibi bileşenler oluşturup kullanabilir miyiz? Bir kaç kere denedim ama, mesela timer'ın onTimer olayına dll içindeki başka bir proceduru atarken şu hatayı veriyor:

Kod: Tümünü seç

Incompotible types: 'method pointer and regular procedure'
Acaba bunun bir çözümü var mı?
İyi çalışmalar
KarizMan
Üye
Mesajlar: 60
Kayıt: 31 May 2005 09:13

Mesaj gönderen KarizMan »

Biraz önce şöyle birşey gördüm biyerde: dll içini form koymak. bu ne oluyor? form nasıl çalışıyor bu şekilde?
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

ilk önce Dll'ndeki ilk Unit Sharemem olsun veya daha iyi alternatif olarak FastshareMem kullan.

http://www.codexterity.com/fastsharemem.htm

Verdiğin hatanı bu yüzden kaynaklanmadığı belli. Sen hata veren satırdaki kodlarını bir yapıştır ona göre bakalım.
KarizMan
Üye
Mesajlar: 60
Kayıt: 31 May 2005 09:13

Mesaj gönderen KarizMan »

Hocam deneme amaçlı yazdığım kod şu:

Kod: Tümünü seç

library Project2;


uses
  SysUtils,
  Classes,
  ExtCtrls,
  Windows;

  procedure goster;export;
  begin
    Messagebox(0,'deneme bir iki','baslik bir iki üc',0);
  end;
  procedure deneme;export;
  var x:TTimer;
  begin
    x:=TTimer.Create(nil);
    x.Interval:=500;
    x.OnTimer:=goster;// burada hata veriyor.
    x.Enabled:=true;
  end;
  exports
  goster,deneme;
{$R *.res}

begin
end.
bunu nasıl düzeltebilirim.
Bu ShareMem, dll üzerinden memoryde, formlardaki gibi işlemlerin olmasını mı sağlıyor? Teşekkürler
İyi çalışmalar
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
verdiği hata mesajı lütfen..... :evil:
birde o atama işlemini dll de değilde normal program içerisinde yapabiliyormusun. Şu an bakamıyorum ama procedurenin parametrelerinden (enazından bi sender parametresi) kaynaklanıyor gibi me geliyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
KarizMan
Üye
Mesajlar: 60
Kayıt: 31 May 2005 09:13

Mesaj gönderen KarizMan »

hocam hatayı ilk mesajımda yazmıştım :) .
normal formda oluyor. Ama şöyle oluyor.
Procedure goster(sender:tobject); 'i en başta tanımlıyoruz.

daha sonra
procedure tform1.goster(sender:tobject);
begin
..
end;
ile devam ediyoruz

benim timer.ontimer:=goster; dersek oluyor.
ben dll de tanımlama yapabilirmiyim. proceduru yazarken tform1 yerine ne yazacam.? teşekkürler
iyi çalışmalar
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
peki formda tanımlarken sender parametresini veriyorsunda dll de tanımlarken niye vermiyorsun.

Kod: Tümünü seç

  procedure goster;export;
  begin
    Messagebox(0,'deneme bir iki','baslik bir iki üc',0);
  end;
burada gosterin sonuna parametreleri yerleştir bakalım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
KarizMan
Üye
Mesajlar: 60
Kayıt: 31 May 2005 09:13

Mesaj gönderen KarizMan »

Öyle de denedim fakat olmadı. baş tarafında tform1. olmadığı zamanda olmuyor normal formda yaparken. yani illa tanımlamak gerekiyor önceden.bunu dll'de nasıl yaparım?
iyi çalışmalar
KarizMan
Üye
Mesajlar: 60
Kayıt: 31 May 2005 09:13

Mesaj gönderen KarizMan »

arkadaşlar bir yardım gerekiyor. bu dll içine bileşen nasıl koyabilirim?yada formsuz uygulamalara bileşen eklenemiyor mu?
iyi çalışmalar
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

TTimer.OnTimer eventi bir nesne methodu istediğini söylüyor. Sen regular bir proc. geçmeye çalışıyorsun. Hata bu yüzden oluşuyor.

Peki ne yapacaksın. Şunu yapacaksın. Madem illa bir nesne methodu isteniyor bir nesne tanımlayalım:

Kod: Tümünü seç

type
  TTimerEvent = class
  public
    // Bu method'u OnTimer eventi ile aynı türden tanımladık, yani TNotifyEvent olarak
    class procedure DoTimer(Sender: TObject);
  end;

// Class procedure yaptık ki nesneyi create etmeye gerek olmasın.
class procedure TTimerEvent.DoTimer(Sender: TObject);
begin
  ShowMessage('Ceee');
end;
Şimdi:

Kod: Tümünü seç

Timer1.OnTimer:= TTimerEvent.DoTimer;
diyerek atamamı rahatlıkla yaparilirim. Çünkü bütün şartlar sağlandı.

Bu legal yoldu. İllegal yollar ile regular bir proc. u da kabul ettirme şansı var. Ancak doğru yoldan giderek kodu okunabilir yapmak daha önemli.
KarizMan
Üye
Mesajlar: 60
Kayıt: 31 May 2005 09:13

Mesaj gönderen KarizMan »

hocam çok teşekkürler. kod işime yaradı. fakat formu olmayan bir uygulamaya koyduğumda , hata veriyor acaba neden?
iyi çalışmalar
Cevapla