IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC] plantage programme lors de migration VC6 vers studio 2010


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 24
    Points : 30
    Points
    30
    Par défaut [MFC] plantage programme lors de migration VC6 vers studio 2010
    Bonjour,

    j'essai de migrer un projet de visual studio 6 (win XP) vers visual studio 2010 sous Windows 7.
    Mon programme est un petit executable MFC qui permet d'afficher une fenêtre RDP (suite à un appel d'une dll)
    Mon soucis à ce jour est que je n'arrive même pas à exécuter mon petit programme en autonome : Il plante à l'éxecution (en debug ou release dans visual studio) :
    Detected memory leaks!
    Dumping objects ->
    f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {393} normal block at 0x002AB0D0, 12 bytes long.
    Data: < > 00 00 00 00 00 00 00 00 00 00 00 00
    Object dump complete.
    The program '[5952] monprogrammerdpclientMfc.exe: Native' has exited with code 0 (0x0).
    L'erreur intervient dans occcont.cpp , ligne 925: La méthode de occcont.cpp ci-dessous est appelée après plusieurs étapes lors du domodal() sur mon objet dont la classe est dérivée de CDialog.
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    BOOL COleControlContainer::FillListSitesOrWnds(_AFX_OCC_DIALOG_INFO* pOccDlgInfo)
    {
    	if (pOccDlgInfo==NULL) { return FALSE; }
    	COleControlSiteOrWnd *pSiteOrWnd = NULL;
    	//When this function is called, the m_listSitesOrWnds contains only ActiveX controls
    	//created by MFC from resource, or by user who called CreateControl.
    	//The code inserts the Win32 controls (found in dialog template resource) into
    	//the list, before, in between or after the ActiveX controls, according to the 
    	//order in the dialog template.
    	POSITION pos = m_listSitesOrWnds.GetHeadPosition();
    	POSITION posOld = pos;
    	if(pos)
    	{
    		pSiteOrWnd = m_listSitesOrWnds.GetNext(pos);
    	}
    
    	HWND hwndStart=NULL;
    	for(unsigned i = 0; i < pOccDlgInfo->m_cItems; i++)
    	{
    		ASSERT(!pSiteOrWnd || pSiteOrWnd->m_pSite); //pSiteOrWnd must point at either ActiveX or NULL (list end).
    		if(pSiteOrWnd!=NULL && pSiteOrWnd->m_pSite!=NULL &&
    			pSiteOrWnd->m_pSite->m_nID == pOccDlgInfo->m_pItemInfo[i].nId)
    		{ => ne passe pas ici
    			//If not Windowless control, update the starting position in z-order search.
    			if (pSiteOrWnd->m_pSite->m_hWnd != NULL)
    			{
    				hwndStart = pSiteOrWnd->m_pSite->m_hWnd;
    			}
    			posOld = pos;
    			pSiteOrWnd = pos ? m_listSitesOrWnds.GetNext(pos) :	NULL;
    		}
    		else
    		{Passe ici
    			if(pOccDlgInfo->m_pItemInfo[i].nId)
    			{
    				//AfxGetDlgItemStartFromHWND fix , is to handle non-unique ids 
    				//of resource items (IDC_STATIC), that causes ::GetDlgItem
    				//to always find the first (in Win32 z-order child list) window with
    				//this id, and thus m_listSitesOrWnds contained several instances of the same hwnd.
    				
    				//First time start searching from first z-order, else
    				//search from 1 after the previous window.
    				HWND hwndSearchFrom= (hwndStart == NULL) ? 
    									 GetWindow(m_pWnd->GetSafeHwnd(),GW_CHILD) :
    									 ::GetWindow(hwndStart,GW_HWNDNEXT);
    				
    				HWND hwndCtrl=AfxGetDlgItemStartFromHWND(pOccDlgInfo->m_pItemInfo[i].nId, hwndSearchFrom);
    				//If not found, revert to prev method of GetDlgItem, this means Win32 children list and 
    				//resource item array are out of sync
    				if (hwndCtrl == NULL)
    				{
    					hwndCtrl = ::GetDlgItem(m_pWnd->GetSafeHwnd(),pOccDlgInfo->m_pItemInfo[i].nId);
    					TRACE(traceAppMsg, 0, "Warning: Resource items and Win32 Z-order lists are out of sync. Tab order may be not defined well.\n");
    				}
    				COleControlSiteOrWnd *pTemp =
    					new COleControlSiteOrWnd(
    						hwndCtrl,
    						pOccDlgInfo->m_pItemInfo[i].bAutoRadioButton);
    				ASSERT(IsWindow(pTemp->m_hWnd));
    				if (IsWindow(pTemp->m_hWnd)) Plante ici, m_hWnd est null
    Après avoir tenté de recompiler sous studio 2010, les classes en relation avec MFC et ATL, comme il est préconisé dans la doc des MFC lors des migrations, ça ne change rien.
    Préconisation microsoft : http://msdn.microsoft.com/en-us/libr...VS.100%29.aspx
    (Ce même projet fonctionne très bien (compilation et exécution) sous XP et visual studio 6.)

    Quelqu'un a-t-il eu ce genre de problème sous studio 2010 (windows 7)?

    Par avance merci.

  2. #2
    Membre confirmé
    Profil pro
    Développeur indépendant
    Inscrit en
    Août 2004
    Messages
    373
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2004
    Messages : 373
    Points : 514
    Points
    514
    Par défaut beuhhh
    heu bétement, tu pourrais être plus précis.??
    erreur de compilation, d'execution??
    sur quelle ligne, sur celle que tu as montré.?
    ton ptemp, on sait pas d'ou il sort ni ce qu'il represente..
    quand à ce que doit faire la fonction , on est pas payé du tout pour arriver à le deviner..
    donnes des infos..

    bon ,j'ai un peu cherché, ca m'a interloqué.
    j'ai trouvé ca https://groups.google.com/group/micr...5&rnum=1&hl=en
    qui semble être proche de ce que tu rencontres.
    en gros, si j'ai cherché dans la bonne direction, t'as un probleme avec un controle activex, pour simplifier, il faudra sans doute que tu recompiles cet activex sous visual2010 pour que ca fonctionne.
    ceci à cause des changements intervenus dans les sources du sdk pour vc2010.
    vala.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 24
    Points : 30
    Points
    30
    Par défaut exposé du problème enrichi
    Merci eomer pour cette piste.
    Je vais creuser dans cette direction mais à première vue mon programme ne cré pas l'activex dans la méthode oncreate. (sous windows 7, il semble que pour se connecter en rdp, il faille utiliser seulement mstscax.dll, l'ocx msrdp.ocx n'hexiste plus, cette fonctionnalité reste néamoins un activex je suppose?).

    J'ai enrichi la description de mon problème.
    Ceci dit, tu avais deviné le soucis, et gratuitement en plus

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 24
    Points : 30
    Points
    30
    Par défaut [Résolu]
    Ca y est ça marche!

    Effectivement, il y avait un problème de contrôle activeX.

    Ce contrôle activeX n'utilise plus l'OCX msrdp.ocx mais la dll mstscax.dll sous seven.
    Il faut modifier la version du contrôle activeX dans mon IHM, pour une interface plus récente du contrôle "Microsoft RDP Client Control". Les versions 2 et 3 pointent vers cette ancien ocx et les versions suivantes 4 à 8 utilisent la dll mstscax.dll. (on a pris la version 6 et installé les redistribuables MFC version 90 (win 2008), (ça marche aussi avec la version 2010))
    Maintenant ça marche!
    Merci

Discussions similaires

  1. [AC-2013] migration Automation vers Excel 2010
    Par DBSP94 dans le forum Access
    Réponses: 1
    Dernier message: 14/01/2014, 19h38
  2. Problème lors de la migration VS2008 vers VS 2010
    Par pbatty1 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 29/06/2011, 21h41
  3. [SP2010] Migration données vers sharepoint 2010
    Par xanass dans le forum Développement Sharepoint
    Réponses: 17
    Dernier message: 08/12/2010, 16h25
  4. Migration VC6 vers Sudio 2005
    Par Chachane dans le forum C++
    Réponses: 2
    Dernier message: 05/08/2009, 10h55
  5. plantage programme lors de sa première execution
    Par goffle dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 12/11/2008, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo