Вниз
Скачать: CL | DM;

Как победить Invalid class typecast в DLL   Найти похожие ветки 

← →
id_privin ©   (2002-10-22 15:16) [0]

Есть DLL c экспортируемым объектом типа TA. У объекта есть свойство Storage типа ТStringList. Есть function getStorage : TStringList.
В приложении есть Query : TIBQuery и A : TA;

В приложении делаю так
A.getStorage.addObject("Foo",Query); //ok
Запускаю функции DLL
----

В Dll (Data : TDataSet)

index := Storage.IndexOf("Foo"); //ok index = 0
Data := Storage.Objects[index] as TDataSet; // Получаю exception
invalid class typecast

ShareMem включена.

Мастера как быть?


← →
Wolf ©   (2002-10-22 15:33) [1]

Попробуй так
Data:=TdataSet(Storage.Objects[index])


← →
id_privin ©   (2002-10-22 15:43) [2]

Пробовал. Тогда потом на любом методе типа Data.Open получаю access violation.


← →
Игорь Шевченко ©   (2002-10-22 15:47) [3]

В DLL и в приложении разная таблица классов. Для того, чтобы не мучиться, приложение и DLL надо скомпилировать с run-time пакетами.


← →
id_privin ©   (2002-10-22 15:55) [4]

А без них как нибудь можно?


← →
Skier ©   (2002-10-22 15:56) [5]

>id_privin


> А без них как нибудь можно?


Отказаться от классов.


← →
Wolf ©   (2002-10-22 16:11) [6]

Ты получишь access violation в этом случае и без DLL.

Кажется можно так.
Data:=TdataSet(Storage.Objects[index]);
Q:=data as TQuery; // или чего-то другое

или сразу
Q:=TQuery(Storage.Objects[index]);


← →
Bis   (2002-10-22 16:36) [7]

да если уж as не прошел, то прямое преобразование тоже не поможет


← →
Wolf ©   (2002-10-22 17:25) [8]

2Bis

Вот как раз поможет!
TdataSet из DLL и TdataSet из Exe - это два разных класса, т.к.
находятся в разных адресных пространствах. Поэтому приводить нужно явно.


← →
asmith   (2002-10-23 17:30) [9]

Вот как раз адресное пространство у них общее, а таблицы виртуальных методов (VMT) у каждого своя, так что приведение типов работать не будет В ПРИНЦИПЕ.


← →
Игорь Шевченко ©   (2002-10-23 17:53) [10]


> TdataSet из DLL и TdataSet из Exe - это два разных класса,
> т.к.
> находятся в разных адресных пространствах


Бред



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.012 c
14-11441
NetBreaker666
2002-10-14 20:13
2002.11.04
Люди, знаете такую фишку: TMT Pascal....


1-11149
volph777
2002-10-24 12:26
2002.11.04
конвертирование даты


14-11457
premium
2002-10-15 20:40
2002.11.04
Кто знает интересные рецепты коктейлей?


3-11059
Duce
2002-10-14 14:28
2002.11.04
Возврат курсора TQuery в прежнюю позицию после обновления


14-11480
Дмитрий Баранов
2002-10-16 14:09
2002.11.04
Пылесос реестра




   Наверх