PDA

Просмотр полной версии : DLL



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

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

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

Romeo
08.11.2004, 19:39
Какой exception именно?

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

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

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

Kolinus
09.11.2004, 17:42
понятно.
Спасибо