Вниз
Скачать: 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.014 c
1-11283
turusov
2002-10-23 13:46
2002.11.04
Новое в OpenDialog


14-11415
strong
2002-10-12 16:57
2002.11.04
Куда же его спрятать?


14-11487
Ketmar
2002-10-16 16:36
2002.11.04
господа, а есть среди вас любители игрушки Elite?


7-11521
Leviathan
2002-07-18 13:32
2002.11.04
Активация программы


3-11039
Shadow
2002-10-14 16:11
2002.11.04
Как переконвертировать TStringGrid в DBF и сохранить?




   Наверх