Главная страница
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.017 c
15-1247430614
Юрий
2009-07-13 00:30
2009.09.13
С днем рождения ! 13 июля 2009 понедельник


2-1247228683
proger_ru
2009-07-10 16:24
2009.09.13
Звуковые карты


15-1247559834
Dennis I. Komarov
2009-07-14 12:23
2009.09.13
ico Windows


1-1215011817
Дмитрий Белькевич
2008-07-02 19:16
2009.09.13
Глюк с формой fsStayOnTop.


2-1247119359
Алексей85
2009-07-09 10:02
2009.09.13
Перенос приложения