Variant变量是在程序运行是分配地址,所以编译时不会显示运行时可能出现的错误(如调用不存在的方法等)。
你的错误在于:
PVarAry:=varArrayLock(FvarAry);这句。
varArrayLock返回具有和Variant数组相同特性的Delphi数组,这意味着在这里。
Var DelphiArray: Array [下界..上界] of Integer;
对应于:VarArrayCreate([0,FvarintCount],varinteger);
所以应该用:
DelphiArray := varArrayLock(FvarAry);—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”或者去掉';
I.Desire := '加不加分随你';
—————————————————————————————————
你的错误在于:
PVarAry:=varArrayLock(FvarAry);这句。
varArrayLock返回具有和Variant数组相同特性的Delphi数组,这意味着在这里。
Var DelphiArray: Array [下界..上界] of Integer;
对应于:VarArrayCreate([0,FvarintCount],varinteger);
所以应该用:
DelphiArray := varArrayLock(FvarAry);—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”或者去掉';
I.Desire := '加不加分随你';
—————————————————————————————————
function VarArrayLock(var A: Variant): Pointer;另附上一个delphi的例子,帮助里的:
type PArrayData = ^TArrayData;
TArrayData = array[0..9, 1..3] of Integer;
var
A: Variant;
P: PArrayData;
I, J: Integer;
begin
A := VarArrayCreate([1, 3, 0, 9], varInteger);
P := VarArrayLock(A);
try
for I := 0 to 9 do
for J := 1 to 3 do
P^[I, J] := J * 10 + I; finally
VarArrayUnlock(A); end;
WriteLn(A[1, 9]); { 19 }
WriteLn(A[3, 4]); { 34 }end;