在详细一点:
interface:unit Unit2;interface
function AAddB(a,b:word):word;
implementation
function AAddB;external 'TestNo1.dll' name 'AAddB';
end.调用:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, 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;implementation
uses Unit2;{$R *.DFM}
                
procedure TForm1.Button1Click(Sender: TObject);
var
  i:word;
begin
  i:=AAddB(3,4);
  ShowMessage(FloatToStr(i));
end;end.帮忙看看

解决方案 »

  1.   

    运行该程序,ShowMessage显示9867,可能是变量地址,哪儿错了?那位兄弟帮忙Up一下
      

  2.   

    明显错了,如下...library TestNo1;
    {$DEFINE TestNo1}uses
      SysUtils,
      Classes;{$R *.RES}function AAddB(a,b:word):word;StdCall;
    begin
      result:=a+b;
    end;exports
      AAddB;begin  //你没加begin,必然报错
    end.
      

  3.   

    function AAddB(a,b:word):word;
    implementation
    function AAddB;external 'TestNo1.dll' name 'AAddB';
    改为function AAddB;external 'TestNo1.dll' name 'AAddB';
    implementation
    应该就可以了
      

  4.   

    问题在调用啊。既然你dll声明了stdcall,那么调用为什么不声明了,Delphi缺省调用是register啊。
    应该是:
    interface
    function AAddB(a,b:word):word;stdcall;
    implementation
    function AAddB;external 'TestNo1.dll' name 'AAddB';
      

  5.   

    chechy说得对,但我对Bob7946(X度空间)的说法有一点不明白,为什么还要加begin
    虽然加与不加都没错,但我还是想知道为什么可加可不加,完了结账
      

  6.   

    在begin 和 end.中是放什么代码的地方?
      

  7.   

    begin,end中是不是放DLL初始化时的代码。比如想跟踪DLL是否被使用,及被使用多少回。D5DG中有描述。
    通常是不需要的。