[MFC .NET] Erreur dans wingdi.cpp ligne 92

Signaler
Messages postés
50
Date d'inscription
dimanche 28 décembre 2003
Statut
Membre
Dernière intervention
11 avril 2006
-
Messages postés
50
Date d'inscription
dimanche 28 décembre 2003
Statut
Membre
Dernière intervention
11 avril 2006
-
Bonjour,



Je suis en train de développer une application MFC sous .net en Simple Document.

J'ai un problème que je n'arrive absolument pas a résoudre. En effet,
totalement aléatoirement, il m'arrive d'avoir une erreur "Debug
assertion failed" a la ligne 92 de wingdi.cpp.

Le truc bizarre, est le fait que ca soit totalement aléatoire !... (des
fois ca arrive 2-3 fois de suite, d'autre aucune ...) et que le fait de
faire "ignorer" ne gêne absolument en rien le déroulement de mon
application ... ca fait seulement "tache" d'avoir une erreur comme ca
en plein milieu...



Je pense qu'il doit y avoir un "truc MFC" que je n'ai pas du faire ... parce que ca me parait tres bizarre...

Pour info, l'erreur survient "souvent" (maintenant, ca n'est pas tout
le temps le cas...) lorsque je déplace ma souris sur la toolbar...
(maintenant, je peux me tromper...)

Quelques infos sur l'application : j'utilise plusieurs threads (que je
controle : 'normalement' l'erreur ne devrait pas venir de là...)



Voili voilou... si des gens ont déjà eu affaire avec cette erreur, merci de partager vos tuyaux ^_^



Merci d'avance pour les réponses :)

5 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Pourrais-tu mettre le nom de la fonction de wingdi.cpp qui contient la ligne 92 ainsi que le code autour de cette ligne car je n'ai que la version de VC++ 6.0 sous la main et à cet endroit il n'y a pas grand chose.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
CDC* PASCAL CDC::FromHandle(HDC hDC)

{

CHandleMap* pMap = afxMapHDC(TRUE); //create map if not exist

ASSERT(pMap != NULL);

CDC* pDC = (CDC*)pMap->FromHandle(hDC);

ASSERT(pDC NULL || pDC->m_hDC hDC); // LIGNE 92

return pDC;

}
Messages postés
50
Date d'inscription
dimanche 28 décembre 2003
Statut
Membre
Dernière intervention
11 avril 2006
1
*confirme



Plus exactement, la call stack :

> mfc71d.dll!CDC::FromHandle(HDC__ * hDC=0x0d0109f2) Line 92 + 0x21 C++

mfc71d.dll!CWnd::OnWndMsg(unsigned int
message=20, unsigned int wParam=218171890, long lParam=0, long *
pResult=0x0012f634) Line 1895 + 0x9 C++

mfc71d.dll!CWnd::WindowProc(unsigned int
message=20, unsigned int wParam=218171890, long lParam=0) Line
1745 + 0x1e C++

mfc71d.dll!CControlBar::WindowProc(unsigned
int nMsg=20, unsigned int wParam=218171890, long lParam=0) Line
503 + 0x14 C++

mfc71d.dll!AfxCallWndProc(CWnd *
pWnd=0x003c694c, HWND__ * hWnd=0x000d0544, unsigned int nMsg=20,
unsigned int wParam=218171890, long lParam=0) Line 241 +
0x1a C++

mfc71d.dll!AfxWndProc(HWND__ *
hWnd=0x000d0544, unsigned int nMsg=20, unsigned int wParam=218171890,
long lParam=0) Line 389 C++

mfc71d.dll!AfxWndProcBase(HWND__ *
hWnd=0x000d0544, unsigned int nMsg=20, unsigned int wParam=218171890,
long lParam=0) Line 209 + 0x15 C++
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
C'est extrèmement bizarre d'avoir un Assertion Failed à cet endroit étant donné qu'il s'agit juste de mapper un HDC sur un CDC* et que ce genre de table est utilisé pour tous les handles (HWND, HBITMAP...).

Ce que je peux suggéger, dans le code au lieu de faire :
CDC* pDC = CDC::FromHandle(hdc);
faire :
CDC dc;
dc.Attach(hdc);
CDC* pDc = &dc;
....
à la fin de la fonction :
dc.Dettach();
ça devrait marcher pareil.

Cependant ton problème d'assertion vient peut-être d'un écrasement mémoire qui corrompt les tables de mapping MFC.
Messages postés
50
Date d'inscription
dimanche 28 décembre 2003
Statut
Membre
Dernière intervention
11 avril 2006
1
Le probleme, c'est que comme le montre la call stack, cette erreur est
totalement indépendante de mon code puisqu'elle n'arrive pas dans une
de mes routines mais elle survient dans une routine de la mfc.

Pour résumer : je n'utilise absolument pas la méthode statique
FromHandle :) (et aucune méthode qui utilise cette méthode ... en tout
cas au moment où provient cette erreur :) )





En revanche, ce qui doit etre la cause de ce probleme, doit ETRE ISSU
de mon code : en gros, il y a quelque chose que j'ai 'mal' fait quelque
part (qui doit 'corrompre les tables de mapping mfc' ou autre chose...).

Je regarderai tout ce qui concerne les contextes graphiques avant
l'apparition de l'erreur pour voir si j'initialise 'bien' mes contextes
graphiques.



je vous post ca ce soir pour vérification :)