Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.13;
Скачать: CL | DM;

Вниз

наследник TObjectList в dll   Найти похожие ветки 

 
Darvin   (2009-07-14 10:04) [0]

Здравствуйте!
Споткнулся на ровном месте, там где всегда проходил в легкую.
Пишу DLL, требуется сделать в ней список объектов. Использую для этого наследника TObjectList, описываю его так:

type
 TStabElement = class
 public
   X, Y : Double;
   constructor Create ( AX, AY : Double );
 end;  

 TStabList = class ( TObjectList )
 public
   function  GetElement ( Idx : Integer ) : TStabElement;
   procedure SetElement ( Idx : Integer; Element : TStabElement );
 public
   function Add ( X, Y : Double ) : Integer;
   property Items [index : Integer] : TStabElement read GetElement write SetElement; default;
 end;
 

Реализация:

constructor TStabElement.Create(AX, AY: Double);
begin
 X := AX;
 Y := AY;
end;

function TStabList.Add ( X, Y : Double ) : Integer;
var
 Item : TStabElement;
begin
 Item := TStabElement.Create(X, Y);
 Result := inherited Add ( Item );
end;

function TStabList.GetElement ( Idx : Integer ) : TStabElement;
begin
 ASSERT ( (Idx >= 0) and (Idx < Count) );
 ASSERT ( Items[Idx] is TStabElement );
 Result := TStabElement ( inherited Items[Idx] );
end;

procedure TStabList.SetElement ( Idx : Integer; Element : TStabElement );
begin
 ASSERT ( (Idx >= 0) and (Idx < Count) );
 ASSERT ( Items[Idx] is TStabElement );
 inherited Items[Idx] := Element;
end;


Использование:

...
var
 DataS : TStabList;

procedure XXX;
var
 X, Y : Double;
begin
 ...
 DataS := TStabList.Create;
 ...
 for i:=0 to N-1 do
   DataS.Add(X, Y);
 ...
 for i:=0 to DataS.Count-1 do
   F := DataS[I].X + DataS[I].Y;
 ...
end;
...


Так вот, при обращении к элементам списка DataS[I].X возникает сбой "Stack overflow". Сбой происходит такж при трассировке в отладчике. Много раз делал подобным образом наследников TObjectList, а здесь не могу сообразить. Правда, никогда не делал такого в dll. В чем может быть проблема?


 
Сергей М. ©   (2009-07-14 10:14) [1]


> никогда не делал такого в dll.


Оно и в exe работать не будет, так что dll тут совсем ни причем.

function TStabList.GetElement ( Idx : Integer ) : TStabElement;
begin
ASSERT ( (Idx >= 0) and (Idx < Count) );
ASSERT ( inherited Items[Idx] is TStabElement );
Result := TStabElement ( inherited Items[Idx] );
end;

procedure TStabList.SetElement ( Idx : Integer; Element : TStabElement );
begin
ASSERT ( (Idx >= 0) and (Idx < Count) );
ASSERT ( inherited Items[Idx] is TStabElement );
inherited Items[Idx] := Element;
end;


 
Darvin   (2009-07-14 10:19) [2]


> Сергей М.

Точно! Огромное спасибо!



Страницы: 1 вся ветка

Текущий архив: 2009.09.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
15-1248038747
Германн
2009-07-20 01:25
2009.09.13
Если кто знает что-то подобное?


1-1215107303
Zheksik
2008-07-03 21:48
2009.09.13
Как провести линию на компоненте фигура(Shape)?


15-1247170961
Roman111
2009-07-10 00:22
2009.09.13
LTP порт принтера


15-1247212772
Pavia
2009-07-10 11:59
2009.09.13
Куда пойти?


15-1247400180
Василий М
2009-07-12 16:03
2009.09.13
Посоветуйте, на какую версию Дельфи переходить