Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.26;
Скачать: CL | DM;

Вниз

проблемка переделки VCL в KOL   Найти похожие ветки 

 
vastani   (2008-10-15 13:41) [0]

Здравия всем! При попытке быренько переделать VCL компонентик по принципам KOL с использованием object(TObj) вместо class наткнулся на проблему.
Имею VCL компонент вида:
type
 TSQLDriver = class;
 TSQLStatement = class
   private
     FSQLDriver: TSQLDriver;
................
................
 TSQLDriver = class
   private
     FActive: Boolean;
     FStatements: TList;
     procedure AddStatement(Stmt: TSQLStatement);
................
................

Посматривая в КOL листинги, стараюсь выдержать философию так:
type
 PSQLStatement = ^TSQLStatement;
 TSQLStatement = object(TObj)
   private
     FSQLDriver: PSQLDriver;
................
................
type
   PSQLDriver = ^TSQLDriver;
   TSQLDriver = object(TObj)
   private
     FActive: Boolean;
     FStatements: PList;
     procedure AddStatement(Stmt: PSQLStatement);
................
................
НО! Но, при попытке компилить получаю ругательство, на строки с необьявленными PSQLDriver(TSQLDriver). Преставил TSQLDriver "выше" TSQLStatement, теперь необъявленым оказывается TSQLStatement... Смотрю VCL, понимаю, что самая первая строка
 TSQLDriver = class;
решает ТАМ эту проблему, НО в KOL class применять не принято!? Ведь так? Как быть, подскажите.
И еще. Попытка найти хоть какую нить статейку по переделкам (портированию) VCL в KOL ни к чему не привели. Есть ли таковые вообще? Основые моменты, шаги, порядок ,на что обратить внимание и т.д...


 
mdw ©   (2008-10-15 18:35) [1]

Неренесите  "PSQLDriver = ^TSQLDriver;" вперед. Объявление TSQLDriver и PSQLDriver должно быть в одном блоке "type". Примерно так:

type
PSQLDriver = ^TSQLDriver;
PSQLStatement = ^TSQLStatement;
TSQLStatement = object(TObj)
  private
    FSQLDriver: PSQLDriver;
................
................
//type - этого быть не должно!
  TSQLDriver = object(TObj)
  private
    FActive: Boolean;
    FStatements: PList;
    procedure AddStatement(Stmt: PSQLStatement);


 
mdw ©   (2008-10-15 18:36) [2]


> Попытка найти хоть какую нить статейку по переделкам (портированию)
> VCL в KOL ни к чему не привели. Есть ли таковые вообще?
> Основые моменты, шаги, порядок ,на что обратить внимание
> и т.д...

Напишите, выложим.;)


 
vastani   (2008-10-16 13:19) [3]

неуспел обрадоваться, как пролучил в перенесенной выше строке:
Undeclared identifier: "TSQLDriver"
замкнутый круг какой то, как уже не кручу - никак...
Неужели это принципиальные ограничения KOL?
Склонен думать, что это я мало знаю... Мужики! Может есть решение?


 
MTsv DN   (2008-10-16 13:39) [4]

Ну, не знаю. Вот такая структура:
type
PSQLDriver = ^TSQLDriver;
PSQLStatement = ^TSQLStatement;
TSQLStatement = object(TObj)
 private
   FSQLDriver: PSQLDriver;
 end;

 TSQLDriver = object(TObj)
 private
  FSQLStatement: PSQLStatement;
 end;

Компилится "на ура"...


 
vastani   (2008-10-16 13:56) [5]

Всё поборол! Огромное спасибо mdw © за наводку:
- Объявление TSQLDriver и PSQLDriver должно быть в одном блоке "type".
и
- //type - этого быть не должно!
Итак строка перенесена по совету, но поскольку объявление было сделано с завершающим конструктором типа New.... так:
type
PSQLStatement = ^TSQLStatement;
TSQLStatement = object(TObj)
  private
    FSQLDriver: PSQLDriver;
................
................
end;
 function NewSQLStatement( AOwner: PObj ): PSQLStatement;

type
  PSQLDriver = ^TSQLDriver;
  TSQLDriver = object(TObj)
  private
    FActive: Boolean;
    FStatements: PList;
    procedure AddStatement(Stmt: PSQLStatement);
................
................
end;
 function NewSQLDriver: PSQLDriver;
Ничего не получалось... видимо именно ввиду наличия между ними function New...... !???
вынос ее "вниз" + советы mdw © вылечили дело.
Теперь то компилится следующее:
type
PSQLDriver = ^TSQLDriver;
PSQLStatement = ^TSQLStatement;
TSQLStatement = object(TObj)
 private
   FSQLDriver: PSQLDriver;
................
................
end;

 TSQLDriver = object(TObj)
 private
   FActive: Boolean;
   FStatements: PList;
   procedure AddStatement(Stmt: PSQLStatement);
................
................
end;
 function NewSQLDriver: PSQLDriver;
 function NewSQLStatement( AOwner: PObj ): PSQLStatement;



Страницы: 1 вся ветка

Текущий архив: 2010.09.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1277877991
AK-47
2010-06-30 10:06
2010.09.26
Конвертация из *.docx в *.doc


2-1277819139
4e6ypek
2010-06-29 17:45
2010.09.26
Добавление скрытого значения в элемент listbox


15-1277843390
Юрий
2010-06-30 00:29
2010.09.26
С днем рождения ! 30 июня 2010 среда


15-1277920171
George
2010-06-30 21:49
2010.09.26
Встреча Codenet 2010


15-1277748407
@!!ex
2010-06-28 22:06
2010.09.26
Проблема с заданием полей таблицы в Lua