Деструктор по умолчанию
От: Mutabor  
Дата: 27.06.03 14:09
Оценка:
Описание проблемы:

в Tools.dll экспортируются два класса

class AFX_EXT_CLASS CResizeDlg : public CDialog
class AFX_EXT_CLASS CMyDlg : public CResizeDlg

деструкторы у них не определены

Tools линкуется к My.dll, динамически загружаемой приложением

Экземпляры класса CMyDlg используются как локальные переменные в членах-функцях диалоговых классов

void CSimpleDlg::OnButtonDown()
{
CMyDlg mydlg;
...

}// Вызываются деструкторы по умолчанию — всё OK


void CSimpleDlg::OnNext()
{
CComplexDlg comp;
comp.DoModal();
....
}

void CComplexDlg ::OnKlick()
{
CMyDlg mydlg;
...

}// Валится в деструкторе CMyDlg

ЧТО ДЕЛАТЬ ТО???????????????????????
Re: Деструктор по умолчанию
От: Ахет  
Дата: 27.06.03 14:20
Оценка:
Здравствуйте, Mutabor, Вы писали:

M>Описание проблемы:


M>в Tools.dll экспортируются два класса


M>class AFX_EXT_CLASS CResizeDlg : public CDialog

M>class AFX_EXT_CLASS CMyDlg : public CResizeDlg

default AFX_EXT_DATA and AFX_EXT_DATADEF macros for using or
creating MFC extension DLLs, depending on _AFX_EXT_IMPL
AFX_EXT_CLASS can be used to import or export entire classes
in an extension DLL without the hassle of creating a .DEF file
with decorated names.


какие preprocessor definitions у библиотек tool.dll и my.dll
Re[2]: Деструктор по умолчанию
От: Mutabor  
Дата: 27.06.03 14:27
Оценка:
Здравствуйте, Ахет, Вы писали:


А>какие preprocessor definitions у библиотек tool.dll и my.dll



tool.dll — Win32 dll
WIN32,NDEBUG,_WINDOWS,_WINDLL,_AFXDLL,_MBCS,_AFXEXT,_DEBUG,_EXPORTING_,
UNICODE,_UNICODE


my.dll — MFC ext
WIN32,_DEBUG,_WINDOWS,_WINDLL,_AFXDLL,_MBCS,_USRDLL,UNICODE,_UNICODE

3 релиза выпустил — всё работало, а потом это всплыло
Re[3]: Деструктор по умолчанию
От: Ахет  
Дата: 27.06.03 14:36
Оценка:
Здравствуйте, Mutabor, Вы писали:

M>Здравствуйте, Ахет, Вы писали:



А>>какие preprocessor definitions у библиотек tool.dll и my.dll


в tool.dll должна быть инициализация MFC, на каждой экспорируемой функции должен стоять макрос AFX_MANAGE_STATE(AfxGetStaticModuleState()); и в каком модуле происходит падение?
Re[3]: Деструктор по умолчанию
От: Ахет  
Дата: 27.06.03 14:38
Оценка:
Здравствуйте, Mutabor, Вы писали:

M>Здравствуйте, Ахет, Вы писали:



M>tool.dll — Win32 dll

M>WIN32,NDEBUG,_WINDOWS,_WINDLL,_AFXDLL,_MBCS,_AFXEXT,_DEBUG,_EXPORTING_,
M>UNICODE,_UNICODE


M>my.dll — MFC ext

M>WIN32,_DEBUG,_WINDOWS,_WINDLL,_AFXDLL,_MBCS,_USRDLL,UNICODE,_UNICODE

и еще:

#ifndef AFX_EXT_DATA
    #ifdef _AFXEXT
        #define AFX_EXT_CLASS       AFX_CLASS_EXPORT
        #define AFX_EXT_API         AFX_API_EXPORT
        #define AFX_EXT_DATA        AFX_DATA_EXPORT
        #define AFX_EXT_DATADEF
    #else
        #define AFX_EXT_CLASS       AFX_CLASS_IMPORT
        #define AFX_EXT_API         AFX_API_IMPORT
        #define AFX_EXT_DATA        AFX_DATA_IMPORT
        #define AFX_EXT_DATADEF
    #endif
#endif


как видишь твои классы экспортируються не понятным образом поскольку в каждой бибилиотеке определены _AFXEXT
Re[4]: Деструктор по умолчанию
От: Mutabor  
Дата: 27.06.03 14:58
Оценка:
Здравствуйте, Ахет, Вы писали:


А>как видишь твои классы экспортируються не понятным образом поскольку в каждой бибилиотеке определены _AFXEXT


А причём здесь деструктор по умолчанию
Re[5]: Деструктор по умолчанию
От: Ахет  
Дата: 27.06.03 15:31
Оценка:
Здравствуйте, Mutabor, Вы писали:

M>А причём здесь деструктор по умолчанию


вызываеться в этом случае может не тот.
Re[6]: Деструктор по умолчанию
От: Mutabor  
Дата: 30.06.03 09:15
Оценка:
Здравствуйте, Ахет, Вы писали:


А>вызываеться в этом случае может не тот.


Всё вылечилось добавлением виртуального деструктора.

Отсюда байка:
Во времена СССР два д.ф.-м.н отдыхали в Крыму.
Купили бутылку портвейна (с пластаковой пробкой) — а открыть нечем.
Долго парились — ничего не помогает.
Видят местного — "Мужик помоги бутылку открыть".
Тот взял бутылку, повертел, говорит "спички есть?".
Доктора ему спички отдали.
Мужик зажёг спичку, нагрел пластиковыю пробку и легонько так рукой открыл.
Протагивает бутылку — "ребята, учите физику!"

Ват и я говорю — "Ребята, учите мат.часть!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.