Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
ВнизИспользование 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c