我做了一个DLL,调用主程序中的函数,总是报错。大虾们能不能帮我看看?DLL和主程序代码如下: 
library Project1;uses
  Wintypes,
  SysUtils,
  Dialogs,
  Classes;type
  Tintfunc=function (x:integer):integer;stdcall;function temp(x:integer;P:TFarProc):integer;stdcall;
begin
  //showmessage('ok');
  if P<>nil then result:=2*Tintfunc(p)(x);
end;
{$R *.RES}
exports
  temp;
begin
end.*********************************************
unit Unit2;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}function temp(x:integer;p:TfarProc):integer;stdcall;external 'project1.dll';function doub(x:integer):integer;
begin
  result:=2*x;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.text:=inttostr(temp(10,@doub));
end;end.

解决方案 »

  1.   

    library Project1;uses
      Wintypes,
      SysUtils,
      Dialogs,
      Classes;type
      Tintfunc=function (x:integer):integer;stdcall;function temp(x:integer;P:TFarProc):integer;stdcall;
    begin
      //showmessage('ok');
      if P<>null then result:=2*Tintfunc(p)(x);/你这个地方错了*/
    end;
    {$R *.RES}
    exports
      temp;
    begin
    end.*********************************************
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}function temp(x:integer;p:TfarProc):integer;stdcall;external 'project1.dll';function doub(x:integer):integer;
    begin
      result:=2*x;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.text:=inttostr(temp(10,@doub));
    end;end.