gpt4 book ai didi

delphi - 无法定义记录指针

转载 作者:行者123 更新时间:2023-12-03 18:36:57 24 4
gpt4 key购买 nike

我正在尝试在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?

最佳答案

不需要指针。
Inno Setup Pascal脚本不支持指针。

该声明:

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


Files作为var参数传递,这意味着真正传递的是指向TUnzipFiles的指针。无需制作TUnzipFiles指针数组。
只要将其设置为普通数组,一切都将正常运行。

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

TUnzipFiles = array of TUnzipFile;


现在它将起作用。

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

关于delphi - 无法定义记录指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com