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:
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;
}
Je fournis aussi le code de la fonction InitManip():
void CManipDlg::InitManip(HWND hWnd, UINT step)
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
}
où la classe CManipDlg, dérivée de CDialog, est chargée dynamiquement par la classe CXDlg.
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:
Exception non gérée à 0x5f4365c6 (MFC42D.DLL) dans X.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000020.
et la variable locale this à NULL(this 0x00000000 {CWnd hWnd=???} CWnd * const)
L'erreur se situe dans WINNOC.cpp à la ligne suivante:
ASSERT(::IsWindow(m_hWnd));
...Arf!!!

Nicolas