我是Delphi / Pascal语法的新手(尽管实际上可能是FreePascal或PascalScript)。我在宏软件中使用它来与宏软件的API进行交互。我正在尝试与宏软件所有者联系,以让我确切地知道脚本引擎使用的是什么。
无论如何,我在使用具有内存访问权限的记录时遇到了问题,我一生都无法解决。使用下面发布的代码,我得到的确切错误是:
FullcalendarEngine::Engine.routes.url_for({:action=>"index", host: "localhost"}, 'fullcalendar_engine_path')
第53行是:Module: "", Line: 53, Message: Access violation at address 02BC88A8. Read of address 00280060
bars[Length(bars) - 1].Y := foos[i].B;
uses SysUtils;
type
TFoo = record
A: cardinal;
B: int64;
C: string;
end;
TBar = record
X: cardinal;
Y: int64;
Z: string;
end;
我摘录了一些示例,它似乎给我的实际代码同样的错误。我无法发布实际的代码,因为它毫无意义,并且不会在宏软件api和我要控制的软件之外运行-都需要许可证。
我正在尝试创建var
foos: array of TFoo;
bars: array of TBar;
i: Integer;
counter: Integer;
,它是bars
的子集,并应用了一些转换(包括身份)。
如果有用的话:我的实际脚本从文件读入“ foos”,其中每个记录对应文件中的一行,每个元素对应一个逗号分隔的字段。我基本上创建了准系统CSV分析器。此CSV用作我的初始脚本配置。然后,我必须遍历配置并检查要为其编写宏的应用程序的状态。如果满足某些条件,我想将我的配置值从foo复制到bar,但是需要基于要控制的应用程序的状态来应用一些转换。然后,“ bars”最终将用于生成针对该应用程序运行的宏命令。
实际的应用程序会收到这样的错误,并且在遍历foos时不会始终在同一位置失败:
foos
这行代码与我的示例代码中的形式相同:
Module: "Main", Line: 119, Message: Access violation at address 02BC88A8. Read of address 00320044
此示例程序不会始终失败,因此我将其包装成一个循环。但是,在我正在使用的宏应用程序中,当我使用循环时(在计数器= 1,大声笑),脚本似乎更加一致地失败。
我不知道我在想什么,请帮忙。
FinalConfig[Length(FinalConfig) - 1].Qty := InitialConfig[i].Qty;
预期输出:
begin
counter:= 0;
while (true) do
begin
counter:= counter + 1;
print(counter);
SetLength(foos, 3);
with foos[0] do
begin
A := 1;
B := 2;
C := 'three';
end;
with foos[1] do
begin
A := 4;
B := 5;
C := 'six';
end;
with foos[2] do
begin
A := 7;
B := 8;
C := 'nine';
end;
for i:= 0 to Length(foos) - 1 do
begin
if foos[i].B > 3 then
begin
SetLength(bars, Length(bars) + 1);
bars[Length(bars) - 1].X := foos[i].A;
bars[Length(bars) - 1].Y := foos[i].B;
bars[Length(bars) - 1].Z := foos[i].C;
end;
end;
for i:= 0 to Length(bars) - 1 do
begin
print(Format('X: %d, Y: %d, Z: %s', [bars[i].X, bars[i].Y, bars[i].Z]));
end;
end;
end.