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

Atmaweapon Messages postés 50 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 11 avril 2006 - 24 févr. 2005 à 22:30
Atmaweapon Messages postés 50 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 11 avril 2006 - 28 févr. 2005 à 13:34
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
25 févr. 2005 à 09:08
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.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 févr. 2005 à 13:45
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;

}
0
Atmaweapon Messages postés 50 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 11 avril 2006 1
25 févr. 2005 à 20:50
*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++
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
28 févr. 2005 à 09:07
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Atmaweapon Messages postés 50 Date d'inscription dimanche 28 décembre 2003 Statut Membre Dernière intervention 11 avril 2006 1
28 févr. 2005 à 13:34
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 :)
0
Rejoignez-nous