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

Вниз

Как сохранить совместимость при передаче указат. на объект в DLL?   Найти похожие ветки 

 
Vorobyev Sergey   (2003-08-21 08:33) [0]

Привет всем!
Объясню вопрос на примере..

Есть определенный класс
TMySuperClass = class(TObject)
private
...
protected
...
public
property Count:integer read GetCount write SetCount;
...
end;

определяю переменную этого класса
var
SimpleObject: TMySuperClass;

далее в программе создаю его, определяю некоторые свойства и т.п., а затем передаю этот указатель в DLL
...
FirstDLLFunction(SimpleObject);
...

далее DLL работает с ним как ей необходимо, естественно для использования этого объекта в DLL там используется Unit с описанием этого класса.

Теперь сам вопрос.. Представим случай, когда:
1. Изменилось описание класса, например, добавилось пара свойств или методов.
2. Был создан дочерний класс (TMySuperClassChild) и объект SimpleObject определили этим классом..

Естественно при передаче в функцию DLL этого указателя (FirstDLLFunction(SimpleObject)) получаются ошибки.. (проверял)
Необходимо перекомпилить DLL..

ВОПРОС: А как сделать так, чтобы DLL не надо было перекомпилировать? Т.е. она была когда-то создана и работает себе.. Может даже исходников не осталось.. Но у класса прибавилось функциональности (см. п.1), либо это вообще дочерний класс (см. п.2) и если DLL будет вызывать эти методы, то они сработают в соответствии с новой функциональностью..
Как тут быть?
И как вы в таких случаях поступаете?

Надеюсь, понятно объяснил..
Спасибо за внимание!


 
Семен Сорокин ©   (2003-08-21 10:22) [1]

никак - только перекомпилировать или использовать интерфейсы.
для того чтобы два раза не писать объявление класса используй директиву $I
а вообще посмотри здесь:
http://www.delphimaster.ru/articles/book/Chap09.pdf


 
Юрий Федоров ©   (2003-08-21 10:53) [2]

попробуй через интерфейсы, новых методов конечно без перекомпиляции не добавишь, а вот реализацию существующих можно будет менять


 
Vorobyev Sergey   (2003-08-23 10:19) [3]

Спасибо!



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

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

Наверх




Память: 0.47 MB
Время: 0.015 c
1-10745
Borgir
2003-08-25 08:36
2003.09.04
Прерывание функции


14-10955
Proger_XP
2003-08-11 10:52
2003.09.04
Delphi7


3-10582
korvin
2003-08-14 09:25
2003.09.04
---|Ветка была без названия|---


3-10645
Ден
2003-08-12 14:25
2003.09.04
Снова строки


14-10957
alekcey75
2003-08-15 17:54
2003.09.04
элипс