Форум: "Начинающим";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];
Внизнаследник 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c