无法定义记录指针

时间:2014-02-11 01:54:23

标签: delphi pointers inno-setup record

我正在尝试在Inno Setup(Unicode)中实现一个记录指针,以匹配Delphi DLL的规范......

type
  PUnzipFile = ^TUnzipFile;
  TUnzipFile = record
    Caption: WideString;
    Src: WideString;
    Dest: WideString;
    Status: Integer;
    Size: Integer;
    ErrCode: Integer;
    ErrMsg: WideString;
  end;
  TUnzipFiles = array of PUnzipFile;

function UnzipFiles(var Files: TUnzipFiles; const Silent: Bool): Bool;
  external 'UnzipFiles@files:Unzipper.dll stdcall';

问题是编译器在PUnzipFile = ^TUnzipFile;行上失败,因为显然Inno Setup不像Delphi那样支持指针。在Delphi中实现时,此记录指针非常完美......

function UnzipFiles(var Files: TUnzipFiles; const Silent: Bool): Bool; stdcall;
  external 'Unzipper.dll';

如果Inno Setup不支持记录指针,我如何使用此DLL?

1 个答案:

答案 0 :(得分:2)

不需要指针 Inno Setup Pascal Script不支持指针。

声明:

function UnzipFiles(var Files: TUnzipFiles; const Silent: BOOL): BOOL; external 'UnzipFiles@files:Unzipper.dll stdcall';

Files作为var参数传递,这意味着实际传递的是指向TUnzipFiles的指针。没有必要制作TUnzipFiles指针数组 只需使它成为一个正常的数组,一切都会工作。

解决方案是使用相关记录的数组:

TUnzipFiles = array of TUnzipFile;

现在它会起作用。

因为var参数在内部传递指针,所以你的调用不会更慢(或更快) 这就是德尔福的美丽。它隐藏了几乎所有你需要它的情况下指针的复杂性。
所有对象引用和var参数都是指针,但您不必担心。