Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-11505
new23
2002-08-29 14:23
2002.11.04
Как узнать запущено приложение с определенным именем или нет?


6-11362
BAHO
2002-09-03 00:39
2002.11.04
Трафик


1-11146
opoloXAI
2002-10-24 13:05
2002.11.04
Сообщение об ошибке при показе MessageDlg.


1-11325
BillyJeans
2002-10-23 15:26
2002.11.04
Не хочу её больше видеть!


7-11513
Сергей Николаев
2002-08-29 14:53
2002.11.04
Видюха и моя программа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский