Forumda bu konunun çözümünü buldum fakat tüm denemelerime rağmen bir türlü çözemedim.. Bana yardımcı olurmusunuz
DLL
Kod: Tümünü seç
library OrnekDLL;
uses
SysUtils,
Classes,
Dialogs,
ShareMem;
{$R *.res}
procedure Mesaj;
begin
ShowMessage('DLL Den Selamlar');
end;
function Hesapla(a,b:Real):Real; stdcall;
begin
Result := a*b;
end;
function MesajDondur(msg:PChar):PChar; export;
begin
Result := msg;
end;
//Fonksiyonların Çıkışı
exports
Mesaj,
Hesapla,
MesajDondur;
begin
end.
Kod: Tümünü seç
unit Unit1;
interface
uses
ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
THesapla = function (a,b:Real):Real;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
procedure Mesaj; external 'OrnekDLL.dll';
function Hesapla(a,b:Real):Real; stdcall; external 'OrnekDLL.dll';
function MesajDondur(msg:PChar):PChar; external 'OrnekDLL.dll';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Mesaj;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(FloatToStr(Hesapla(10,25)));
end;
procedure TForm1.Button3Click(Sender: TObject);
var
handle : THandle;
hsp : THesapla;
ret : Real;
begin
try
handle := LoadLibrary('OrnekDLL.dll');
if handle<>0 then
begin
@hsp := GetProcAddress(handle,'Hesapla');
if Addr(hsp)<>nil then
begin
ShowMessage(FloatToStr(hsp(10,20)));
end
else
ShowMessage('Fonksiyon Bulunamadı');
end
else
ShowMessage('DLL Bulunamadı');
finally
FreeLibrary(handle);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
ShowMessage(MesajDondur('Merhaba'));
end;
end.
Konunun aciliyeti çok yüksek. Bana yardımcı olursanız sevinirim..