Главная страница
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.018 c
1-10814
lord
2003-08-21 11:55
2003.09.04
вывод переменной s= CSCFlags=0 #0 MAXUses=4294967295 на екран


3-10542
XED
2003-08-15 02:15
2003.09.04
Нужна помощь по MySQL(Zeos Component)


14-10950
Soft
2003-08-15 18:45
2003.09.04
АнтиМикрософт


9-10539
Sword-Fish
2002-10-19 01:23
2003.09.04
Создание 3D игр на GLScene


1-10795
Maks
2003-08-25 13:02
2003.09.04
Масштаб Image