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

Вниз

Некорректное поведение Delphi IDE или руки кривые?   Найти похожие ветки 

 
Asdor ©   (2004-03-12 10:04) [0]

Здраствуйте, мастера.

Возникла небольшая, вобщем-то проблема, но она меня уже потихонечку достала...

Ситуация:
Есть базовый интерфейс
IBaseInterface=Interface(IDispatch)
 procedure SomeProc;safecall;
end;


И базовый класс, его реализующий.

TBaseAutoObject=Class(TAutoObject, IBaseInterface);
protected
 procedure SomeProc; safecall;
end;


Это все лежит в отдельной BPL и TLB.

Дальше создаю OCX c другими интерфейсами, наследниками базового,
и COM-объекты, их реализующие. Ocx использует Runtime BPL, в которой лежит базовый объект, реализующий IBaseInterface, и библиотеку типов, в которой объявлен IBaseInterface.

INewInterface=Interface(IBaseInterface)
 procedure SomeProc2; safecall;
end;


TNewIntImpl=Class(TBaseAutoObject, INewInterface)
protected
 procedure SomeProc2; SafeCall;
end;


Так в первоначальном варианте. Все компилируется и работает.
Но как только я делаю Refresh Implementation или Save проекта
Delphi добавляет в TNewIntImpl описание методов интерфейса IBaseInterface и пустую их реализацию, хотя у них уже есть реализация в классе TBaseAutoObject от которого наследует TNewIntImpl.
Соответственно, если вовремя это не отследить и не постираеть пустые реализации, получается некорректное повеление моих объектов.
Подскажите, как избавиться от такого поведения IDE?


 
Asdor ©   (2004-03-12 11:46) [1]

Никто не знает?


 
Asdor ©   (2004-03-12 16:56) [2]

Ну ответьте хоть кто-нибудь... Хоть что-нибудь... :( :)


 
WebErr ©   (2004-03-12 16:58) [3]


> Asdor ©   (12.03.04 16:56) [2]
> Ну ответьте хоть кто-нибудь... Хоть что-нибудь... :( :)


 
Asdor ©   (2004-03-12 17:02) [4]

А все-таки по существу вопроса? :)
Решение одно есть - не наследовать интерфейсы а просто вставлять их в редакторе библиотеки типов в Implements.
С точки зрения функциональности получится то же самое...
Но с наследованием лучше - а вдруг забудешь вставить какой-нить нужный интерфейс...


 
WebErr ©   (2004-03-12 17:25) [5]


> а вдруг забудешь вставить какой-нить нужный интерфейс...

Не забудешь - зачем наследовать! :)


 
Гаврила   (2004-03-12 18:33) [6]

Редактор библиотеки типов в Delphi - одна из самых кривых реализаций чего либо, что я видел. Руки отрывать за такое.
Особенно он не любит наследования интерфейсов, а если, не дай бог, TLB использует другую TLB и кто-то наследуется от интерфейса, объявленного там, редактор просто сходит с ума

Я решил проблему так
пишу на языке IDL и компилирую *.tlb компирятором от MS


 
Asdor ©   (2004-03-12 18:50) [7]

мда... а можно как нибудь отключить AutoComplete дельфой класса?
чтобы она сама в нем ничего не делала, кроме того, что я написал или когда на Ctrl+C нажму.
Мне даже не влом самому покопировать определения методов их *_TLB.pas в класс. (Правда влом их потом еще и в Implementation прописывать, ну да ладно, пропишу... ).

Из этого всего самое противное, что она добавляет их когда делаешь Save - что делается достаточно часто. С Refresh Implementation - ладно, вроде как сам нажал. а вот когда Save - то это уже просто самовольство какое-то... Кто в коде хозяин? я или IDE? :)


 
Гаврила   (2004-03-12 20:46) [8]

>>Asdor ©   (12.03.04 18:50) [7]
совет - сделай как я :-)
на IDL пишется текстовка
затем батник
сначала компиляция *.tlb -майкрософтом
потом генерация *_TLB.pas уже борландом
и вписать как ресурс где-нибудь в другом месте, а не в *.dpr
чтобы среда не пыталась автоматом решать эту задачу
чтобы думала, что tlb в проекте нет


 
Sentinel ©   (2004-03-12 20:59) [9]


> Asdor ©   (12.03.04 18:50) [7]


uses
 ComServ,
 Project1_TLB in "Project1_TLB.pas",
 Unit1 in "Unit1.pas" {BaseInterface: CoClass};
Вот если убрать выделенное жирным, то после переоткрытия проекта автогенерации кода в реализации TBaseInterface не будет. Правда, что дальше...


 
Asdor ©   (2004-03-15 14:17) [10]

2 Sentinel и всем ответившим - ограомное спасибо.
Это помогло и это именно то, что мне нужно.


 
Asdor ©   (2004-03-15 14:17) [11]

2 Sentinel и всем ответившим - огромное спасибо.
Это помогло и это именно то, что мне нужно.



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

Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.034 c
14-1078743675
ISP
2004-03-08 14:01
2004.04.04
Чем посоветуете видео порезать?


3-1078651599
Masha Streltsova
2004-03-07 12:26
2004.04.04
Ни как не получается вставить долбанный ComboBox в DBGrid


3-1078276851
DimaF
2004-03-03 04:20
2004.04.04
TIBDataSet


1-1079446720
_Nicola_
2004-03-16 17:18
2004.04.04
Еще раз про плагины


1-1079624269
Роман К
2004-03-18 18:37
2004.04.04
Замена иконок у SpeedButton во время выпонения





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