【问题标题】:Alternatives for For..in loop in Delphi 7?Delphi 7中For..in循环的替代方案?
【发布时间】:2014-05-19 05:23:17
【问题描述】:

在编译此代码Link时,我在 for in 循环中遇到了 Delphi 7 错误

procedure GetProcessorInfo;
Var
  SMBios             : TSMBios;
  LProcessorInfo     : TProcessorInformation;
  LSRAMTypes         : TCacheSRAMTypes;
begin
  SMBios:=TSMBios.Create;
  try
      WriteLn('Processor Information');
      if SMBios.HasProcessorInfo then
      for LProcessorInfo in SMBios.ProcessorInfo do // <-- Error here
      begin
        ...
      end;
  ...
end;

错误信息:

[错误] Project1.dpr(52): 运算符不适用于此操作数类型

还有其他方法吗?或者我该如何解决?

【问题讨论】:

  • for .. in 不受 Delphi 7 支持

标签: delphi delphi-7


【解决方案1】:

Delphi 7 不支持for .. in,所以需要自己迭代TSMBios.ProcessorInfo数组

procedure GetProcessorInfo;
Var
  SMBios             : TSMBios;
  LProcessorInfo     : TProcessorInformation;
  LSRAMTypes         : TCacheSRAMTypes;
  LIdx : Integer; // add this
begin
  SMBios:=TSMBios.Create;
  try
    WriteLn('Processor Information');
    if SMBios.HasProcessorInfo then
      // for LProcessorInfo in SMBios.ProcessorInfo do
      for LIdx := Low( SMBios.ProcessorInfo ) to High( SMBios.ProcessorInfo ) do
      begin
        LProcessorInfo := SMBios.ProcessorInfo[LIdx];
        ...
      end;
  ...
end;

【讨论】:

    【解决方案2】:

    for in 循环语法是在 Delphi 2005 中引入的。Delphi 7 不支持这种语法。您需要重新编码循环以使用传统的基于索引的 for 循环。

    for i := 0 to high( SMBios.ProcessorInfo ) do
    begin
      LProcessorInfo := SMBios.ProcessorInfo[i];
      ....
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2020-11-14
      • 2020-01-15
      相关资源
      最近更新 更多