Страница 1 из 1

DLL

Добавлено: 08 ноя 2004, 13:21
Kolinus
Доброгго времени суток.
Вопрос:
//main.cpp
class A
{
int a();
virtual void b();
}

//dll.cpp
class B : public A
{
void b();
}

из главного приложения загружаю длл. вызываю функцию, которая возвращает мне указатель на объект класса B
выгружаю длл, не удаляя возвращенный объект.
после этого
из приложения вызываю
b->a() - все работает
b->b() - эксепшн.
В чем проблема ?

Добавлено: 08 ноя 2004, 19:39
Romeo
Какой exception именно?

Добавлено: 08 ноя 2004, 20:07
Kolinus
Access violation
В общем прокунсультировался еще с парой человек сказали что скорее всего фишка в том что при выгрузке длл разрушается виртуальная таблицп вызовов функций для данного объекта.
Есть соображения ?

Добавлено: 08 ноя 2004, 20:14
Romeo
Отследи в дебагере таблицу виртуальных методов, если подозрения подтвердятся и она окажется битой - выгружай DLL тогда, когда объект уже не нужен.

Добавлено: 09 ноя 2004, 17:38
Eugie
Kolinus, при выгрузке DLL ты теряешь доступ к коду, реализущему соотв.виртуальную функцию. Сама-то vtable остается при объекте, только указатели на методы в ней становятся инвалидными.

Добавлено: 09 ноя 2004, 17:42
Kolinus
понятно.
Спасибо