merhaba
biraz çalıştıktan sonra aşağıdaki şekilde sorunu çözdüm.
stsinyal prosedürüne bir parametre eklemem gerekti.
Ona dikkat et biraz.
TekDurum projesi dosyaları
Tekdurum.dpr dosyası:
Kod: Tümünü seç
library Tekdurum;
uses
SysUtils,
Classes,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
procedure stbaz;
var
form:tform1;
begin
form:=Tform1.create(nil);
form.showmodal;
end;
procedure stsinyal(i:integer);
var
form:tform2;
begin
form:=Tform2.create(nil);
form.Tag:=i;
form.show;
end;
exports
stbaz,stsinyal;
{$R *.res}
begin
end.
unit1.pas:
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
StBazE1: TEdit;
StSinyal: TButton;
procedure StSinyal2Click(Sender: TObject);
procedure StSinyal3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses unit2;
procedure TForm1.StSinyal2Click(Sender: TObject);
var
stsinyal: procedure(i:integer);
DLLHandle: THandle;
begin
DLLHandle := LoadLibrary('Tekdurum.dll');
try
stsinyal:=GetProcAddress(DLLHandle, 'stsinyal');
if Assigned(stsinyal) then
stsinyal(integer(self))
else
MessageDlg('İşlem Gerçekleştirilemedi !!',
mtInformation, [mbOk], 0);
finally
//FreeLibrary(DLLHandle);
end; // try..finally
end;
procedure TForm1.StSinyal3Click(Sender: TObject);
var
form:tform2;
begin
form:=Tform2.create(nil);
form.show;
end;
end.
unit2.pas:
Kod: Tümünü seç
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
StSinyalE1: TEdit;
StSinyalB1: TButton;
Label1: TLabel;
procedure StSinyalB1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses unit1;
{$R *.dfm}
procedure TForm2.StSinyalB1Click(Sender: TObject);
Var
f:TForm1;
begin
f:=Ptr(Self.Tag);
if f is TForm1 then
StSinyalE1.Text := f.StBazE1.Text ;
end;
end.
exec projesi dosyaları
exec.dpr:
Kod: Tümünü seç
program Exec;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit1.pas:
Kod: Tümünü seç
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;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
stbaz: procedure;
DLLHandle: THandle;
begin
DLLHandle := LoadLibrary('Tekdurum.dll');
try
stbaz:=GetProcAddress(DLLHandle, 'stbaz');
if Assigned(stbaz) then
stbaz
else
MessageDlg('The specified routine cannot be found.',
mtInformation, [mbOk], 0);
finally
//FreeLibrary(DLLHandle);
end; // try..finally
end;
end.