这在某种程度上是我之前的问题的延续,在这里找到。本质上,我正在尝试用一个基本示例测试 dll/函数,但我得到了“ E2010 - 不兼容的类型:AInteger/ADouble and Set ”和“ E1012 - 常量表达式违反了子范围界限”错误。我(有点)明白它想说什么,但不知道我应该修复什么。例如:
var
n: Integer;
Ap, Ai: AInteger;
Ax, b: ADouble;
begin
// Initializations
n := 5;
Ap := [0, 2, 5, 9, 10, 12]; <- E2010
Ai := [0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4]; <- E2010
Ax := [2, 3, 3, -1, 4, 4, -3, 1, 2, 2, 6, 1]; <- E2010 and E1012
b := [8, 45, -3, 3, 19]; <- E1012
其中AInteger
和ADouble
类型是我的数组:
ADouble = array[0..High(Integer) div SizeOf(Double) - 1] of Double;
AInteger = array[0..High(Integer) div SizeOf(Integer) - 1] of Integer;
并且应该以这种方式初始化(根据 Rudy 的 Delphi 页面和其他 C-to-Pascal 源),因为它们是用double Ax[]
C 编写的。我确信我做错了一些简单的事情,或者为了测试我可以改变dll,但也许我在谷歌上搜索错了,因为我找不到示例/解决方案。所以,以问题的形式:
Q1 : E1012 是指
“如果你做这些[AInteger 和 ADouble]之类的事情,请确保不要太接近 High(Integer),因为编译器可能会抱怨数据结构太大。” (引自鲁迪的页面)
Q2 : 我应该如何更改此代码?
提前感谢您的帮助。