Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.007 c
1-1215078860
DrPass
2008-07-03 13:54
2009.09.13
Секция finalization не выполняется


15-1247583182
Пит
2009-07-14 18:53
2009.09.13
Покупка Adobe Photoshop


9-1181661095
MERLIN:)
2007-06-12 19:11
2009.09.13
Нужно сделать анимацию


9-1181818935
MegaVolt
2007-06-14 15:02
2009.09.13
Несколько компонентов исспользующих OpenGL не работают вместе :(


15-1247248175
Tirael
2009-07-10 21:49
2009.09.13
посоветуйте программу для просмотра видео с камеры наблюдения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский