Runtime Dll kullanımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
feinpus
Üye
Mesajlar: 214
Kayıt: 17 Kas 2003 04:37
Konum: İstanbul
İletişim:

Runtime Dll kullanımı

Mesaj gönderen feinpus »

Herkese selamlar...

Ben dll'cilerden biraz yardım istiyorum.
Delphide hazırladığım bir formu buttonlarıyla labelleriyle ve fonksiyonlarıyla birlikte bir dll dosyası içerisine nasıl yerleştirebilirim. Ve buradan nasıl çağırabilirim. :roll:

Ayrıca bunun yanında birde bu dll dosyasını program çalıştığı anda dll'yi yükleyerek formu veya içerisindeki fonksiyonları kullanmak istiyorum. :?:
Oldeye Software
http://www.oldeye.com
Kullanıcı avatarı
feinpus
Üye
Mesajlar: 214
Kayıt: 17 Kas 2003 04:37
Konum: İstanbul
İletişim:

Mesaj gönderen feinpus »

Bu arada ben dayanamadım dll içine formu gömdüm ama bunu hala run time olarak çalıştıramıyorum.... :D
Oldeye Software
http://www.oldeye.com
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Mesaj gönderen DotCom »

ilk önce dll dosyanı oluştur daha sonrada oluşturdugun bu dll dosyasından function larını programın içerisinde çağırmayı dene. aşağıda dll dosyasını nasıl oluşturacagını ve prograam içerisinden nasıl çağıracagını anlattım...

Kod: Tümünü seç

/////DLL dosyası----------------------------------------
library topla_dll;
uses
  SysUtils,
  Classes;

{$R *.res}
function carp(x,y:integer):integer;export;
begin
 carp:=x*y;
end;

function topla(x,y:integer):integer;export;
begin
 topla:=x+y;
end;

exports topla,carp;

begin
end.
Yukarıdaki dosyayı topla_dll olarak kaydettik. ve aşağıdaki kod ile de asıl programmızdan çağırdık.

Kod: Tümünü seç

implementation
Function topla(x,y:integer):integer;far;external 'topla_dll.dll';
-------

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage('10+5 ='+inttostr(topla(10,5)));
end;
Umarım yardımcı olabilmişimdir.
Kullanıcı avatarı
feinpus
Üye
Mesajlar: 214
Kayıt: 17 Kas 2003 04:37
Konum: İstanbul
İletişim:

Mesaj gönderen feinpus »

Tamam benim fonksiyonlarda veya dll yazma konusunda bir sıkıntım yok sadece program içine önceden yerleştirilmemiş bir dll dosyasını runtime olarak yükleyerek içerisindeki fonksiyonlerı belirleyip bunları program çalışırken kullanmak...
Oldeye Software
http://www.oldeye.com
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

LoadLibrary gibi bir fonksiyon ile yukleniyordu
runtime dll loading falan yazarak google da aratırsan bazı ornekler bulabilirsin
ben bir zamanlar normal dll yazma ve programdan cagırma hakkında aratmıstım
runtime olanlarda karsıma cıkmıstı
hatta elemanın teki super bir fonksiyon yazmıstı
dosya olarak seciyorsun yukluyor dll i
ama alıp denemedim
hatırladıklarım bu kadar
kolay gelsin
ÜŞENME,ERTELEME,VAZGEÇME
xdat
Üye
Mesajlar: 5
Kayıt: 25 Ara 2003 05:36
Konum: Ankara

RunTime DLL (Formlu) -1

Mesaj gönderen xdat »

Merhabalar..

Bu soruna üç parçada cevap vereğim ilk'i Dll'in ana dpr'si buradaki Goster
Unit1'in içerisindeki Goster'i ifade ediyor.

#################
library Yazdir;


uses
sharemem,
SysUtils,
Forms,
Classes,
Form1 in 'Unit1.pas' {Form1};

{$R *.res}

exports
Goster;



end.
#################
xdat
Üye
Mesajlar: 5
Kayıt: 25 Ara 2003 05:36
Konum: Ankara

RunTime DLL (Formlu) -2

Mesaj gönderen xdat »

Bu Parça'da Unit1 (Form1)'in olduğu Yüklemek istediğin Form;

#############################
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

function Goster:integer; stdcall;

var
Form1: TForm1;

implementation

{$R *.dfm}



function Goster:integer; stdcall;
begin
try
Form1 := TForm1.Create(Application);
RaporForm.Showmodal;
RaporForm.free;
RaporForm := Nil;
result := 1;
except
result :=0;
end;
end;

end.

########################3
xdat
Üye
Mesajlar: 5
Kayıt: 25 Ara 2003 05:36
Konum: Ankara

Runtime DLL (Formlu) - 3

Mesaj gönderen xdat »

Buda bu dll'yi kullanan unit...
ondan once yukardakilerde temizlemeyi unuttuğum bazı başılkar var.
ilk rutinde 'Library Yazdir' kamış bu durumda Dll in ismi Yazdir.dll olacak o yüzden aşağıda değişiklik yapmadım.
ikinci rutinde ise
Form1.Create(...
dedikten sonra RaporForm diye devam etmişi,m .o raporform'larda Form1 olacaktı
o dll'yi derledikten sonra bununla ona ulaşırsan istediğin olacaktır iyi çalışmalar.

###################33

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type TGoster = function :integer;stdcall;
var
Form1: TForm1;
hdn : Thandle;
Goster1 : TGoster;
yer : TFarProc;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
hdn :=LoadLibrary('Yazdir.dll');
if hdn<>0 then
begin
Yer:= GetProcAddress(hdn,'Goster');
if Yer<>nil then
begin
Goster1 := TGoster(Yer);
if goster1=0 then
Showmessage('hata');
end;
end;

end.

###################33
iyi çalışmalar.
Cevapla