我做了一个简单的DLL,如下:
library DLL;
uses
  SysUtils,
  Classes;
{$R *.res}
var n:integer=0;
function add():integer;stdcall;
begin
n:=n+2;
result:=n;                  
end;
exports
add;
begin
end.
调用的程序如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
  ...
  end;  TAdd= function():integer;var
  Form1: TForm1;  HInst:THandle;
  FPointer:TFarProc;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
  HInst:=LoadLibrary('Dll.dll');
  FPointer:=GetProcAddress(HInst,'add');
end;
procedure TForm1.Button1Click(Sender: TObject);begin
  showmessage(inttostr(TAdd(FPointer)));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeLibrary(lhnd);
end;end.一点问题都没有,但是
我稍微改了一下DLL如下:
library DLL;uses
  SysUtils,
  Classes;{$R *.res}
var n:integer=0;
function add(step:integer):integer;stdcall;
begin
n:=n+step;
result:=n;  
end;
exports
add;
begin
end.
再调用,如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
  ...
  end;  TAdd= function(step:integer):integer;var
  Form1: TForm1;  HInst:THandle;
  FPointer:TFarProc;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
  HInst:=LoadLibrary('Dll.dll');
  FPointer:=GetProcAddress(HInst,'add');
end;
procedure TForm1.Button1Click(Sender: TObject);begin
  showmessage(inttostr(TAdd(FPointer)(5)));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FreeLibrary(lhnd);
end;end.
就出内存地址的错误,请各位一定要帮我解决问题呀,很着急,谢谢大家了!