![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
наследник TObjectList в dll [D7, XP]
Darvin © (2009-07-14 10:04:00)Здравствуйте!
Споткнулся на ровном месте, там где всегда проходил в легкую.
Пишу 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. В чем может быть проблема?
Darvin (2009-07-14 10:19:00) [1]
> Сергей М.
Точно! Огромное спасибо!
Сергей М. (2009-07-14 10:14:00) [2]
> никогда не делал такого в dll.
Оно и в exe работать не будет, так что dll тут совсем ни причем.
function TStabList.GetElement ( Idx : Integer ) : TStabElement;
begin
ASSERT ( (Idx >= 0) and (Idx < Count) );
ASSERT ( inheritedItems[Idx] is TStabElement );
Result := TStabElement ( inherited Items[Idx] );
end;
procedure TStabList.SetElement ( Idx : Integer; Element : TStabElement );
begin
ASSERT ( (Idx >= 0) and (Idx < Count) );
ASSERT ( inheritedItems[Idx] is TStabElement );
inherited Items[Idx] := Element;
end;