动态加载dll动态库时,参数传递时只有第一个参数可以正确传到形参,是哪里设置的不对么?被加载的dll代码 如下:
library minmax;
uses Dialogs,SysUtils;function Max(var X:Integer;var Y:Integer):Integer;
var
  sss:string;
begin
  sss:=Format('max()参数1=%d,参数2=%d',[x,y]);
  ShowMessage(sss);
  if X > Y then
  begin
    ShowMessage('max返回值是X');
    Result := X;
  end
  else
  begin
    ShowMessage('max返回值是y');
    Result:= Y;
  end;
end;
function Min(var X:Integer;var Y:Integer):Integer;
var
  sss:string;
begin
  sss:=Format('min()参数1=%d,参数2=%d',[x,y]);
  ShowMessage(sss);
  if X < Y then
  begin
     ShowMessage('min返回值是X');
     Min:= X;
  end else
  begin
    ShowMessage('min返回值是y');
    Min := Y;
  end;
end;exports 
Max,
Min,
begin
end.
这个dll静态调用的时候,正常!
可是动态加载的时候,第二个参数y,传递的总是不对啊,解决问题,追加给分!
调用dll的工程代码如下:
unit Unit1;interfaceuses
  Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    BitBtn1: TBitBtn;
    Label1: TLabel;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);type
  TTimeRec = record
    Second: Integer;
    Minute: Integer;
    Hour: Integer;
  end; 
TGetmax  = function (var a:Integer;var b:Integer):Integer;stdcall;
TGetmin  = function (var a:Integer;var b:Integer):Integer;stdcall;
var
  //handle:THandle;
  handle:Cardinal;
  a,b:Integer;
  max:TGetmax;
  min:TGetmin;
  GetTime: TGetTime;
  tp:TFarProc;
  c,d:Integer;
  Time: TTimeRec;
begin
    a:=StrToInt(Edit1.Text);
    b:=StrToInt(Edit2.Text);
    handle:=LoadLibrary('minmax.dll');
    if handle<>0 then
    begin
      @max:=GetProcAddress(handle,'Max');
      if (@max <> nil) then
      begin
        c:=max(a,b);
      end;
      
      @min:=GetProcAddress(handle,'Min');
      if @min <> nil then
      begin
        d:=min(a,b);
      end;
      Edit3.Text:=IntToStr(c);
      Edit4.Text:=IntToStr(d);
    end;
    FreeLibrary(Handle);
end;end.