Доброгго времени суток.
Вопрос:
//main.cpp
class A
{
int a();
virtual void b();
}
//dll.cpp
class B : public A
{
void b();
}
из главного приложения загружаю длл. вызываю функцию, которая возвращает мне указатель на объект класса B
выгружаю длл, не удаляя возвращенный объект.
после этого
из приложения вызываю
b->a() - все работает
b->b() - эксепшн.
В чем проблема ?
DLL
Модераторы: Duncon, Hawk, Romeo, Eugie
В SAD - все в SAD.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Какой exception именно?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Access violation
В общем прокунсультировался еще с парой человек сказали что скорее всего фишка в том что при выгрузке длл разрушается виртуальная таблицп вызовов функций для данного объекта.
Есть соображения ?
В общем прокунсультировался еще с парой человек сказали что скорее всего фишка в том что при выгрузке длл разрушается виртуальная таблицп вызовов функций для данного объекта.
Есть соображения ?
В SAD - все в SAD.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Отследи в дебагере таблицу виртуальных методов, если подозрения подтвердятся и она окажется битой - выгружай DLL тогда, когда объект уже не нужен.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Kolinus, при выгрузке DLL ты теряешь доступ к коду, реализущему соотв.виртуальную функцию. Сама-то vtable остается при объекте, только указатели на методы в ней становятся инвалидными.
понятно.
Спасибо
Спасибо
В SAD - все в SAD.