如何用参数调用DLL程序?

时间:2010-10-01 11:21:20

标签: delphi dll

我在使用带参数的Dll程序发送时遇到问题,我不允许在我的测试项目中调用dll方法调用参数。

我试着调用这个dll方法:

procedure Transfer(sMessage: PChar); stdcall;
begin
    MainForm.ShowThis(sMessage);
end;

exports
Transfer;

TestProj使用:

procedure TForm1.Button1Click(Sender: TObject);
var
DLLHandle : THandle;
begin
    DLLHandle := LoadLibrary ('C:\Program Files\Borland\Delphi5\Projects\Dll\MyLink.dll');
    if DLLHandle >= 32 then
        try
              @Trans := GetProcAddress (DLLHandle, 'Transfer');
              if @Trans <> nil then
                  Trans  //Would like to say something like: Trans('Hello')
              else
                Showmessage('Could not load method address');

        finally
            FreeLibrary(DLLHandle);
    end
    else
        Showmessage('Could not load the dll');
end;

如果我使用“Trans('Hello')”,我得到的编译错误是: [错误] Unit1.pas(51):实际参数太多。

我允许在没有参数的情况下运行它,但之后我只在我的showmessage框中获得jiberish并且之后崩溃,因为我不发送任何消息。

所以问题是如何将字符串作为参数发送到dll?我究竟做错了什么 ?

1 个答案:

答案 0 :(得分:1)

你不应该使用赋值左侧的指针符号(@),Trans变量应该如下所示:

type
  TTransferPtr = procedure (sMessage: PChar); stdcall;

var
  Trans: TTransferPtr;

// Then use it like this:
Trans := TTransferPtr(GetProcAddress (DLLHandle, 'Transfer'));
if @Trans <> nil then
  Trans(PChar('Hello'));