我正在尝试在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?
答案 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参数都是指针,但您不必担心。