Главная страница
    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.004 c
1-1214477815
yaric
2008-06-26 14:56
2009.09.13
выгрузка chartobject-а в html


3-1227078955
pavel_guzhanov
2008-11-19 10:15
2009.09.13
как проверить, входит ли значение в набор данных?


3-1227089155
Sesh
2008-11-19 13:05
2009.09.13
OracleLob сохранить в текстовый файл


3-1226490725
Palladin
2008-11-12 14:52
2009.09.13
Oracle и путь к клиентскому приложению


2-1247062851
mr1Andersen
2009-07-08 18:20
2009.09.13
Как программно (Delphi 7), изменить значения «Свойства папки», на





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский