Bonjour,
En mode release, j'ai un plantage de l'application (1 fois sur 2) que je ne retrouve pas en mode debug (apparemment)!
J'ai t�ch� de me rapprocher par dichotomie au plus pr�s de l'erreur et apparemment elle se situerait au niveau de la ligne de code en gras.
Voici le code de la fonction qui plante:
Je fournis aussi le code de la fonction InitManip():
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 bool X::TraiterEtape5() { bool ret = false; //Affichage de la proc�dure ChargerFicProcedure(); //On fournit le HANDLE de la fen�tre pour l'�change de message CManipDlg *manipDlg = reinterpret_cast<CManipDlg *>(m_apDlg); manipDlg->InitManip(m_hWnd, m_Step); // TraiterEtape5_1(manipDlg); // TraiterEtape5_2(manipDlg); manipDlg->SetDlgItemText(IDC_STATIC_ETAT_OP,"R�sultat de la VBF"); GetDlgItem(IDC_BUTTON_SUIV)->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_GO)->ShowWindow(FALSE); m_ButtonSuiv.SetTextColor(RGB(0,150,0)); ::SetEvent(m_hEventBlink); m_nTimer = SetTimer(2, 600, NULL); ret = true; return ret; }
void CManipDlg::InitManip(HWND hWnd, UINT step)
o� la classe CManipDlg, d�riv�e de CDialog, est charg�e dynamiquement par la classe CXDlg.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 { g_hWndMain = hWnd; //variable statique -> globale à la classe g_nStep = step; //variable statique -> globale à la classe }
J'ai �t� aussi oblig� d'utiliser des variables statiques pour la classe CManipDlg car sur l'action d'un control, mes variables n'�taient pas initialis�es aux valeurs pass�es via la fonction InitManip();
Je pense que mon probl�me vient de l� mais je ne sais pas comment y rem�dier...Il me faudrait surement r�cup�rer correctement le handle de la fen�tre fille...
D'apr�s le debbugger, j'ai le message suivant:
et la variable locale this � NULL(this 0x00000000 {CWnd hWnd=???} CWnd * const)Exception non g�r�e � 0x5f4365c6 (MFC42D.DLL) dans X.exe:0xC0000005: Violation d'acc�s lors de la lecture de l'emplacement 0x00000020.
L'erreur se situe dans WINNOC.cpp � la ligne suivante:
ASSERT(::IsWindow(m_hWnd));
...Arf!!!
Nicolas
Partager