如何在delphi 7中调用Dll并将参数传递给它

时间:2011-07-07 12:41:07

标签: delphi

我是delphi noob,所以请帮我解决这个问题。我用以下代码创建了一个DLL:

 library PRdll;
   uses
 ExceptionLog, SysUtils,Classes,Dialogs;

{$R *.res}

  function DllMessage(var a:integer):Integer;stdcall;export;
  begin
      Showmessage('GHelloa');//this is displayed
      ShowMessage(IntToStr(a));//I get the error at this point
       Result:=5;
  end;

    exports DllMessage;
  begin
  end.

此代码给出了对DLL的相应调用:

    var
      FDll: TFDll;
       function DllMessage(var a:integer):integer;stdcall;external 'PRDll.dll';
     implementation

    {$R *.dfm}

       procedure TFDll.btnCallDllClick(Sender: TObject);
      var
       i:integer;
      s1:string;
      begin
           i:=5;
          s1:=IntToStr(DllMessage(i));
         //ShowMessage(s1);
         end;

我收到了访问错误。为什么会这样呢?你好吗?救命!!! 在此先感谢

2 个答案:

答案 0 :(得分:2)

您是否添加了 sharemem 单位?
请参阅帮助。

第二个选项:注释ExceptionLog行,然后重试。
它工作正常。

问候。

答案 1 :(得分:0)

下面发布了正确的代码;我很惊讶为什么没有人能告诉我这个简单的事情

//Dll
 library ProDll;

uses
   ExceptionLog,
  SysUtils,
  Classes,Dialogs;

  function showSqRoot(var a:Double):Double; stdcall; export;
  begin

     Result:=sqrt(a);
   end;

   exports showSqRoot;
  {$R *.res}

   begin
    end.


 //The program
   function showSqRoot(var a:Double):Double;stdcall external 'ProDll.dll'//Notice 'stdcall external' here

 procedure TFcallDLL.btnCallDLLClick(Sender: TObject);
  var
        numInput,numRes:Double;   {Input and Result}
   begin
       numInput:=StrToFloat(edtInput.Text);
      numRes:=showSqRoot(numInput);   {call the function in DLL with the Parameter}
      edtResult.Text:=FloatToStr(numRes); {Display the Result}
    end;

这段代码对我来说很好。