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

Вниз

Использование DLL созданной в D7 для D5   Найти похожие ветки 

 
АлексейК   (2003-06-02 08:28) [0]

DLL скомпилирована в D7 с использованием в параметре эспортируемой процедуры делфянского типа, например
procedure test(aEdit:TEdit; ....);
Если же я подключаю эту DLL в программе скомпилированной на D5 и передаю в процедуру Edit, то любое обращение к методам параметра, например
value:=aEdit.Text
Вызывает ошибку Access Violation. Использование этой DLL в D7 ошибок не вызывает. Ошибка, конечно, закономерна. Однако есть ли какой-нибудь выход из данной ситуации.


 
Rocker ©   (2003-06-02 08:38) [1]

Фирма Borland делает все для несовместимости версий Delphi/
Лучше не пудри себе мозги и пользуйся одинаковыми версиями Delphi - так намного проще, чем исправлять какие-то там ошибки.


 
АлексейК   (2003-06-02 08:43) [2]

А еще какие-нибудь рекомендации будут?


 
Dmitry W. Polschanov   (2003-06-02 09:29) [3]

То, что ваш код оказался несовместим с предъидущими реализациями - в этом Borland не виноват.
Никто никогда не рекомендовал передавать делфийские объекты через параметры процедур в DLL.
Если уж нужно передавать что-то сложное - следует оформлять
все через Record. Или, если уж сильно хочется занятся ООП, то interface.


 
ppcat   (2003-06-02 09:30) [4]

Можно попробовать передавать в DLL не указатель на TEdit, а aEdit.Handle. В DLL создавать свой TEdit и присваивать ему переданный Handle. С точки зрения Windows это корректно, но у Borland могут быть свои заморочки, так что за результат не ручаюсь.


 
Anatoly Podgoretsky ©   (2003-06-02 10:31) [5]

Ничего хорошего все равно не будет, в ДЛЛ свой менеджер памяти ддя классов и объектов. Надо или не использовать объекты или исаользовать BPL


 
АлексейК   (2003-06-02 12:17) [6]

А разве использование BPL не приведет к той же ошибки, что и в DLL?
В передаваемом объекте, мне нужны для использования лишь 5 методов. Обращаясь к методу
aEdit.Text,
я обращаюсь по адресу памяти, либо несуществующему, либо где этого метода нет. Однако если бы заранее выделить адреса памяти, по которому располагается метод, и обращатся к этому методу по ссылке на адресс. Но будет ли это работать?


 
Skier ©   (2003-06-02 12:29) [7]

>АлексейК (02.06.03 08:28)
Host-приложение и DLL имеют разную "таблицу классов", т.е.
указатели на VMT и таблицу RTTI для одних и тех же классов в Host-приложение и DLL будут разными.

Поэтому :
1) Перезавай не aEdit, а, скажем (судя по твоему коду), PChar(aEdit.Text)
2) Используй пакеты


 
Anatoly Podgoretsky ©   (2003-06-02 12:37) [8]

Приведет конечно, не стоит передавать объекты.


 
АлексейК   (2003-06-02 12:52) [9]

Ну хорошо, а если колличиство параметров величина переменная, то что посоветуете в данном случае. По сути в DLL необходимо создать точную копию объекта в приложении.


 
Anatoly Podgoretsky ©   (2003-06-02 12:54) [10]

И как тебе удалось создать в дельфи 7 функции с переменным количеством параметров?


 
АлексейК   (2003-06-02 13:00) [11]

>Anatoly Podgoretsky ©
В D7 я передавал ссылку на объект и ошибки не возникало. Ошибка стала возникать, при подлючении к приложению скомпилированном на D5.





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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
14-35050
mox
2003-05-27 20:48
2003.06.12
Перезагрузка Windows


3-34739
Юлия
2003-05-23 19:05
2003.06.12
Уникальный индекс


1-34773
wera
2003-06-02 11:31
2003.06.12
выбор


1-34864
seregey
2003-05-30 11:42
2003.06.12
Что я сломал в Дельфях?


3-34675
Weare
2003-05-22 14:05
2003.06.12
Работа с CashedUpdates