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

Вниз

Некорректное поведение 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
1-1079694228
Alex*
2004-03-19 14:03
2004.04.04
Опять Excel – специальная вставка


1-1079361777
RomeoGolf
2004-03-15 17:42
2004.04.04
Canvas.ClipRect


1-1079431499
Alex Shulg
2004-03-16 13:04
2004.04.04
MessageBox & mb_Help ???


7-1074492835
Dmitriy_G
2004-01-19 09:13
2004.04.04
Как мне проверить наличие сигнала CTS, в COM


4-1074462161
Prov
2004-01-19 00:42
2004.04.04
как спрятать приложение(не смешно)