Delphi错误E2283太多局部常量

时间:2010-08-18 18:36:23

标签: delphi string compiler-construction literals

我的Delphi 2006中的代码存在编译问题。我使用的是静态String数组:

fsi_names : array [0..FSI_NUM_VARS-1] of string;

在我在程序开始时调用的过程中,我为这个数组赋值。这段代码是由我编写的脚本自动生成的。它由与下一行类似的行组成:

fsi_names[idFSI_FLIGHT_PATH_ANGLE] := 'FSI_FLIGHT_PATH_ANGLE';

在这个数组中总共要分配大约2000个元素。我无法找到编译器死亡的神奇数字,但它适用于1853而不适用于2109。

问题是我需要这个数组将ID(它是数组的索引)转换为名称作为各种应用程序的字符串。

我知道如果我将分配作业列表并将部分放入不同的程序中,那么它就可以了。但由于代码是自动生成的并经常更改,因此这种方法不太舒服。

我还想过将内容放入一个文件并在运行时读取它,但我宁愿将我必须发送的文件数量保持在最低限度。另外,我想保护普通用户的内容,这样他就不会搞砸了。

您是否知道如何克服编译器的限制,或者更改我的代码以实现我的目标?

非常感谢帮助。

3 个答案:

答案 0 :(得分:3)

如果我是你,我会创建一个带有标识符的简单ASCII文本文件,以便该文件的行idFSI_FLIGHT_PATH_ANGLE + 1包含字符串“FSI_FLIGHT_PATH_ANGLE”。然后我会将此文件添加到应用程序的资源中。通过这样做,数据将包含在EXE中,您可以在运行时轻松读取数据:

function GetNthString(const N: integer): string;
var
  RS: TResourceStream;
begin
  RS := TResourceStream.Create(hInstance, 'NAMEOFRESOURCE', RT_RCDATA);
  with TStringList.Create do
    try
      LoadFromStream(RS);
      result := Strings[N];
    finally
      Free;
    end;
  RS.Free;
end;

答案 1 :(得分:1)

我找到了解决方案!

如果我在定义它的位置初始化我的数组,那么编译器不会吐出错误消息:

const
  fsi_names : array [0..FSI_NUM_VARS-1] of string = (
    'NAME 0',
    'NAME 1',
    ...
    'LAST NAME'
    );

据我所知,如果我这样做,字符串文字的数量没有限制。

非常感谢你的想法,mj2008的那个是最有帮助的!

度过愉快的一天

弗洛

答案 2 :(得分:-2)

替代方案是使用动态数组

from
fsi_names : array [0..FSI_NUM_VARS-1] of string;

to
fsi_names: array of string;
SetLength(fsi_names, FSI_NUM_VARS);

干杯