1

我目前在 Vista 下使用 CodeGear Delphi 2007。在一些相当繁重的计算过程中,我的应用程序返回内存不足错误。.exe 文件从 150 Mb 增长到惊人的 2 Gb(!哈哈)

关于这个问题:

1)我正在将一些数组更改为 arraylist 但它给了我一些相当困难的问题需要解决(见下面的示例)

2)使用多维结构并需要对代码进行少量更改的建议非常感谢!

现在称呼成员的旧方式是:

function TResults.GetTriangleA(ComNr, triangleA, PtNr : integer) : single;
  Begin
  try
    result := ListTriangleRes[TriangleA - 1].GetA(ComNr, PtNr);

还有类 TriangleResult:

TTriangleRes = class(TResults)
private
IndexPoint1, IndexPoint2, Indexpoint3 : integer; 
MyA : array of array [1..3] of single;  
MyB : array of array [1..3] of single; 

在这里,我正在尝试使用新的数组列表,但到目前为止还不是很成功

function TResults.GetTriangleVz(ComNr, triangleA, PtNr : integer) : single;
Var
  MyTriangleRes:    TTriangleRes;
  MyObj:            Tobject;
begin
  MyTriangleRes:=  TTriangleRes.Create ;
  try
    MyObj := ListTriangleRes[TriangleA - 1] ;
    result := MyObj <<<<?????? how to>>>>MyTriangleRes.GetVz(ComNr, PtNr);

MKR

爱德华

4

2 回答 2

1

据我所知,ArrayList 是一个没有在 Delphi 中使用的 Java/C# 集合。我们的等价物称为 TObjectList。(或 TList,但如果您正在处理对象,最好使用 TObjectList。)这是您正在使用的吗?我假设你是。

看起来您的问题出在对象类型上。有两种方法可以从具有正确类型的列表中获取对象。您可以使用普通列表并对其进行类型转换,或者如果您有 D2009 或 D2010,则可以使用通用列表。

第一种方式,使用 TObjectList:

MyTriangleRes := ListTriangleRes[TriangleA - 1] as TTriangleRes; //type-safe cast

第二种方式:将 ListTriangleRes 声明为 a TObjectList<TTriangleRes>,并将 Generics.Collections 添加到您的uses子句中。这为您在编译时而不是运行时提供类型安全,因为编译器将确保只有 TTriangleRes 对象进入和退出列表。

无论哪种方式,都不需要中间 TObject 变量。

于 2009-09-30T13:55:49.260 回答
0

我不确定您要做什么,但是您的最后一个代码不应该是 MyTriangleRes :=ListTriangleRes[TriangleA-1],然后是 Result:=MyTriangleRes.GetVz(ComNr,PtNr) 吗?

于 2009-09-30T13:41:42.000 回答