DLL den string değer döndürme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
morphine39
Üye
Mesajlar: 35
Kayıt: 02 May 2009 04:50

DLL den string değer döndürme

Mesaj gönderen morphine39 »

Ustalar merhaba

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.
EXE

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.

Button4Onclick de fonksiyon çalışıyor sıkıntı yok fakat programı kapatınca Invalid Point.. hatası alıyorum
Konunun aciliyeti çok yüksek. Bana yardımcı olursanız sevinirim..
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 den string değer döndürme

Mesaj gönderen sabanakman »

Muhtemelen verdiğiniz örneği projenizdeki yapıya benzetmeye çalışmışsınız ama bu örneğin sizin yapınızdan farkı var gibime geliyor. Çünkü örneğe göre belirttiğiniz hata gelmeyecektir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: DLL den string değer döndürme

Mesaj gönderen vkamadan »

Merhabalar ,
Birde DLL in uses kısmında bulunan ShareMem i En başa almayı deneyin, sorunlarınız devam ederse Sharemem i kullanmayın FastShareMem :ara unitini kullanın.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla