Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];

Вниз

проблемка переделки 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 вся ветка

Форум: "KOL";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.003 c
15-1278016189
Юрий
2010-07-02 00:29
2010.09.26
С днем рождения ! 2 июля 2010 пятница


11-1223504578
AnarchyMob
2008-10-09 02:22
2010.09.26
Вопросы по Win CE


15-1277717982
Den
2010-06-28 13:39
2010.09.26
Техническое задание на разработку ПО


15-1277647767
tesseract
2010-06-27 18:09
2010.09.26
Жаренное солнце. У меня помер внешний термометр.


2-1277787890
zergost
2010-06-29 09:04
2010.09.26
данные поля на форме





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