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