pliki dll

0wn3r

Były Moderator
Dołączył
Marzec 10, 2007
Posty
1330
Ma być tak :

unit Unit1;

interface

tu usesy

procedure about

Na końcu masz tam potem źródło :

Kod:
unit MainFrm;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TMainForm = class(TForm)

    btnStaticLoad: TButton;

    btnDynamicLoad: TButton;

    procedure btnStaticLoadClick(Sender: TObject);

    procedure btnDynamicLoadClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  MainForm: TMainForm;



  { ładowanie statyczne }

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



implementation



{$R *.dfm}



procedure TMainForm.btnStaticLoadClick(Sender: TObject);

begin

  About; // wywołanie procedury

end;



procedure TMainForm.btnDynamicLoadClick(Sender: TObject);

var

  DLL : THandle;

  About : procedure;

begin

  DLL := LoadLibrary('SimpleDLL.dll'); // załadowanie pliku

  try

    @About := GetProcAddress(DLL, 'About');  // pobranie wskaźnika do procedury

    if @About = nil then raise Exception.Create('Nie można załadować procedury');

    About; // wykonanie procedury

  finally

    FreeLibrary(DLL);

  end;

end;



end.
 

-=silkroad=-

Użytkownik
Dołączył
Lipiec 9, 2007
Posty
125
unit MainFrm;

interface

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

type
TMainForm = class(TForm)
btnStaticLoad: TButton;
btnDynamicLoad: TButton;
procedure btnStaticLoadClick(Sender: TObject);
procedure btnDynamicLoadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
MainForm: TMainForm;

{ ładowanie statyczne }
procedure About; stdcall external 'SimpleDLL.dll' name 'About';

implementation

{$R *.dfm}

procedure TMainForm.btnStaticLoadClick(Sender: TObject);
begin
About; // wywołanie procedury
end;

procedure TMainForm.btnDynamicLoadClick(Sender: TObject);
var
DLL : THandle;
About : procedure;
begin
DLL := LoadLibrary('SimpleDLL.dll'); // załadowanie pliku
try
@About := GetProcAddress(DLL, 'About'); // pobranie wskaźnika do procedury
if @About = nil then raise Exception.Create('Nie można załadować procedury');
About; // wykonanie procedury
finally
FreeLibrary(DLL);
end;
end;

end.[/b]

czyli jak to wkleję będzie ok mówisz ?
 

djmentos

Użytkownik
Dołączył
Maj 1, 2007
Posty
1868
Kod:
ja bym stawiał na:

unit MainFrm;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TMainForm = class(TForm)

    btnStaticLoad: TButton;

    btnDynamicLoad: TButton;

    procedure btnStaticLoadClick(Sender: TObject);

    procedure btnDynamicLoadClick(Sender: TObject);



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

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  MainForm: TMainForm;
alem może się mylę ;p
 

T$cr!pt3r

Użytkownik
Dołączył
Lipiec 23, 2007
Posty
207
A czemu chcesz ładować dynamicznie?
Wystarczy, że dasz pod Uses:
Kod:
 procedure About; stdcall external 'SimpleDLL.dll' name 'About';

A potem gdzieś w programie:
Kod:
About;
<
 

0wn3r

Były Moderator
Dołączył
Marzec 10, 2007
Posty
1330
-=silkroad=-, nie zrozumiałem twojej wypowiedzi.

To tak jakbyś jeszcze nie rozumiał.
Ten procedure about, ma być pod uses, a interface powyżej uses. Wtedy wszystko zadziała. A jak zechcesz w dll'u wywołać procedurę About, to wpisujesz po prostu gdzieś About; i już procedura sama się wykona, bo została wcześniej zadeklarowana
<


<
 
Do góry Bottom