Newsgroup: it.comp.programmare.win32
Titolo: [VC++] Applicazione Dialog Based e apertura di nuove finestre

Ciao,
	sto cercando di realizzare un'applicazione Dialog based.
In un dialogo ho una serie di bottoni e cliccando su ciascuno di
essi dovrei aprire nuovi dialoghi.
Ciascun dialogo č "gestito" con una variabile della classe
CDialogN m_dialogN
e aperto con il metodo DoModal.
Se lancio il programma e lo chiudo senza fare altro ottengo
una serie di errori (l'istruzione xxxxxx ha fatto riferimento alla
locazione yyyyyy che non poteva essere "read"). Se provo
ad entrare in qualche dialogo ottengo un errore (Debug assertion 
failed Line 52). Il problema l'ho solo con alcuni dialoghi e non
capisco perchč visto che sembrano uguali agli altri.
Immagino che l'errore avvenga quando il programma cerca 
di deallocare le risorse della classe ma non capisco perchč. 
Non ho un distruttore per la classe ... e gli stessi dialoghi inseriti
in un altro punto del codice non mi danno errori.
Qualcuno puo' darmi qualche dritta ?
       Stefano Malavasi
__________________________________________________________________________________________
Email:		s_malavasi_REMOVE_@_REMOVE_lycos.it
Note: 		Remove _REMOVE_ string to reply

        Stefano Malavasi
ciao

eccezioni
Dall'header della classe che fa da menu
private:
	CBottoni m_Bottoni;
	CHelpDlg m_HelpDlg;
	CPopup m_PopupDlg;
	CPasswordDlg m_PasswordDlg;
	COpzione1 m_Opzione1; 
	COpzione2 m_Opzione2;
	COpzione3 m_Opzione3;
	COpzione4 m_Opzione4;
	COpzione5 m_Opzione5;
	COpzione6 m_Opzione6;
	COpzione7 m_Opzione7;
	COpzione8 m_Opzione8;
	COpzione9 m_Opzione9;
Se metto sotto commento la dichiarazione di m_Opzione1,2,3,4 non ho
alcun errore (ovviamente devo togliere i riferimenti anche nel .cpp).
Se non metto sotto commento anche se non entro in questa classe
all'uscita del programma ottengo l'errore la memoria non poteva essere
read. 
L'eccezzione avviene in WinCore.cpp (linea 764). Il codice che ha
generato l'eccezione e'
if (m_pCtrlSite != NULL && m_pCtrlSite->m_pWndCtrl == this)
		m_pCtrlSite->m_pWndCtrl = NULL;
A cosa pensi possa essere dovuto ?


Non capisco perche hai fatto le dichiarazzioni dei dialog nel header della
classe
Se ho capito bene tu hai fatto:
class foo
{
   foo() {}
   dialog1 m_dialog1;
 ...
 void OnClick()
}
OnClick()
{
   m_dialog1.DoModal();
}
non ce bisogna di tutto questo
puo semplicemente fare
OnClick()
{
   dialog1 dialog1;
   dialog1.DoModal();
}
Come hai fatto tu puo essere che lo stack dell programma viene riempito
troppo presto. Hai problemi di memoria?
saluti
Lorenzo
"Stefano Malavasi" <s_malavasi_REMOVE_@_REMOVE_lycos.it> wrote in message
news:0f5nsvsa66gbr8ube...@4ax.com...



Hai ragione la soluzione che proponi tu e' senz'altro la migliore. Il
programma l'avevo iniziato con scarse conoscenze di VC e seguendo
qualche esempio riportato su alcuni testi. Ho provato anche con una
soluzione simile a quella da te indicata ma il problema e' lo stesso,
solo che in questo caso si manifesta solo sull'on click e non quando
apro e chiudo il programma.
       Stefano Malavasi
__________________________________________________________________________________________


        Stefano Malavasi
ciao

        Stefano Malavasi
ciao

controlla che tutti i puntatori siano validi ed integri
La cosa strana e' che se li alloco nell'heap anzichč sullo stack non
mi da errore all'apertura della maschera ma me lo segnala alla
chiusura :(


Ho scoperto cosa causava l'errore ! In effetti facevo
2 volte il subclassing dello stesso controllo.
Ora però mi ritrovo con un nuovo problema. Sia
se alloco i dialoghi sull'help che sullo stack (a propostio
quale delle due soluzione e' da preferirsi ?)
All'uscita mi da sempre un errore
DAMAGE after client block (NNNN) at YYYYY
quando cerco di rimuovere la variabile della classe.
Cercando su google ho visto che dovrebbe trattarsi
di un problema di allocazione/deallocazione di memoria
Ho commentato per intero OnInitDialog, il costruttore
della classe e anche DDX ma l'errore resta. Dove
posso ancora cercare ?
