Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.032 c