[delphi/dll] Załadowanie zmiennej z biblioteki dll

0

Po przeczytaniu Kompendium mam pytanie, jak załadować zmienną z dll'ki do głównego programu?

Chodzi o to: Główny program ma zmienną nazwa:string, i teraz chcę, żeby program "pobrał" tą zmienną z dll'ki i nazwał tak guzik.

Główny program:

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;
  nazwa:string;

procedure About; stdcall external 'biblioteka.dll' name 'About';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 button1.Caption:=nazwa;
 about;
end;

end.

I DLLka

library biblioteka;

uses
  SysUtils, Windows;

type
 nazwa=string;

{$R *.res}

procedure About; stdcall;
var
 nazwa:string;
begin
  nazwa:='Guzik';
end;

exports
  About name 'About';
end.
0

Pomyśleć chwilę. W dllkach posługujemy się typem PChar zamiast string. Poczytaj dlaczego przy tworzeniu w
Delphi nowej dllki. Poza tym jakim cudem procedura bez parametrów ma wiedzieć co i komu przekazać. Zrób
raczej funkcję w taki sposób jak poniżej. Najpierw kod dllki, potem kod programu z ładowaniem statycznym.

library biblioteka;

uses
  SysUtils;

function About : PChar;
begin
  Result := 'Guzik';
end;

exports
  About;
begin
end.

Przykładowy program:

//...
function About : PChar; external 'biblioteka.dll';

var
  Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := About;
end;
0

taka moja mala rada (chociaz kazdy robi jak chce):
ja bym nazwal nie About ale getAbout(); - zwieksza czytelnosc.

0

ja bym jeszcze dodał dyrektywę stdcall przy deklaracji ten funkcji w bibliotecę oraz w programie, tak żeby wszystko było ok</i>

0

Dzięki, teraz wszystko działa jak powinno, wielkie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1