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

Visual C++ Discussion :

GetDlgItem return NULL pointer


Sujet :

Visual C++

  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut GetDlgItem return NULL pointer
    Bonjour,
    lors de l'utlisation de la fonction GetDlgItem
    dans mon code source,il n'y a pas de probl�me lors de la compilation
    mais lors de l'�x�cution l'application crash avec un message d'erreur :
    (MFC42D.DLL) : 0xC0000005 : Access violation
    la ligne de source utilis�e :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    GetDlgItem(IDC_MODIF_MENSUEL)->ShowWindow(FALSE);
    merci d'avance

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Bonjour et bienvenu,
    Question de base : S'agit-il du bon ID? As-tu bien un tel contr�le dans ta bo�te de dialogue?
    Si oui, � quel moment fait-tu cet appel? Dans le OnInitDialog, avant ou apr�s?

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    S'agit-il du bon ID?
    #define IDC_MODIF_MENSUEL 1761

    As-tu bien un tel contr�le dans ta bo�te de dialogue?
    oui,�a marche pour l'appel juste avant:
    GetDlgItem(IDC_AFF_MENSUEL)->ShowWindow(FALSE);
    qui a pour ID:
    #define IDC_AFF_MENSUEL 1713

    Si oui, � quel moment fait-tu cet appel?
    -je l'utilise Dans le corps de ma m�thode OnInitDialog() surcharg�e apr�s avoir appeller CDialog::OnInitDialog().

  4. #4
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    si GetDlgItem renvoi null c'est que le contr�le d�sign� n'existe pas dans la fen�tre.
    v�rifie ta fen�tre et l'identifiant attach� � ce contr�le.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    salut,
    en faite c'est lors du passage dans la m�thode doModal()
    il n'arrive pas � cr�er un dialog :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	// create modeless dialog
    	AfxHookWindowCreate(this);
    	if (CreateDlgIndirect(lpDialogTemplate,
    		CWnd::FromHandle(hWndParent), hInst))
    		{
    		---- 
    		}
    et il passe par l'assertion lors de la m�thode
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    BOOL CWnd::ShowWindow(int nCmdShow)
    {
    	ASSERT(::IsWindow(m_hWnd));
    
    	if (m_pCtrlSite == NULL)
    		return ::ShowWindow(m_hWnd, nCmdShow);
    	else
    		return m_pCtrlSite->ShowWindow(nCmdShow);
    }
    ci-joint la pile si �a peux aider:
    CWnd::ShowWindow(int 0) line 301 + 3 bytes
    CDlgCalendrierDechargement::CacheTousCtrl() line 197
    CDlgCalendrierDechargement::OnInitDialog() line 240
    AfxDlgProc(HWND__ * 0x000808bc, unsigned int 272, unsigned int 329940, unsigned int 329940) line 35 + 14 bytes
    USER32! 77d48709()
    USER32! 77d54ca6()
    USER32! 77d54af2()
    USER32! 77d575bf()
    USER32! 77d48709()
    USER32! 77d487eb()
    USER32! 77d4c00e()
    USER32! 77d4e366()
    CWnd:: DefWindowProcA(unsigned int 272, unsigned int 329940, long 0) line 1000 + 32 bytes
    CWnd:: Default() line 249
    CDialog::HandleInitDialog(unsigned int 329940, unsigned int 329940) line 621 + 8 bytes
    CWnd::OnWndMsg(unsigned int 272, unsigned int 329940, long 0, long * 0x0012e5d8) line 1815 + 17 bytes
    CWnd::WindowProc(unsigned int 272, unsigned int 329940, long 0) line 1585 + 30 bytes
    AfxCallWndProc(CWnd * 0x0012ebfc {CDlgCalendrierDechargement hWnd=0x000808bc}, HWND__ * 0x000808bc, unsigned int 272, unsigned int 329940, long 0) line 215 + 26 bytes
    AfxWndProc(HWND__ * 0x000808bc, unsigned int 272, unsigned int 329940, long 0) line 368
    AfxWndProcBase(HWND__ * 0x000808bc, unsigned int 272, unsigned int 329940, long 0) line 220 + 21 bytes
    USER32! 77d48709()
    USER32! 77d487eb()
    USER32! 77d4b743()
    USER32! 77d558ef()
    USER32! 77d6ec20()
    USER32! 77d5fd5c()
    CWnd::CreateDlgIndirect(const DLGTEMPLATE * 0x00575290, CWnd * 0x0012f4f0 {CConfTraitement hWnd=???}, HINSTANCE__ * 0x00400000) line 327 + 36 bytes
    CDialog:: DoModal() line 528 + 32 bytes
    CPropConfDechargementAuto::OnModifier() line 313 + 11 bytes
    _AfxDispatchCmdMsg(CCmdTarget * 0x0012f57c {CPropConfDechargementAuto hWnd=0x001d0846}, unsigned int 1834, int 0, void (void)* 0x00402f9f CPropConfDechargementAuto::OnModifier(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88
    CCmdTarget::OnCmdMsg(unsigned int 1834, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 302 + 39 bytes
    CDialog::OnCmdMsg(unsigned int 1834, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 97 + 24 bytes
    CWnd::OnCommand(unsigned int 1834, long 657526) line 2088
    CWnd::OnWndMsg(unsigned int 273, unsigned int 1834, long 657526, long * 0x0012ef90) line 1597 + 28 bytes
    CWnd::WindowProc(unsigned int 273, unsigned int 1834, long 657526) line 1585 + 30 bytes
    AfxCallWndProc(CWnd * 0x0012f57c {CPropConfDechargementAuto hWnd=0x001d0846}, HWND__ * 0x001d0846, unsigned int 273, unsigned int 1834, long 657526) line 215 + 26 bytes
    AfxWndProc(HWND__ * 0x001d0846, unsigned int 273, unsigned int 1834, long 657526) line 368
    AfxWndProcBase(HWND__ * 0x001d0846, unsigned int 273, unsigned int 1834, long 657526) line 220 + 21 bytes
    USER32! 77d48709()
    USER32! 77d487eb()
    USER32! 77d4b743()
    USER32! 77d4b7ab()
    USER32! 77d7fc9d()
    USER32! 77d76530()
    USER32! 77d58386()
    USER32! 77d5887a()
    USER32! 77d48709()
    USER32! 77d487eb()
    USER32! 77d489a5()
    USER32! 77d489e8()
    USER32! 77d6e819()
    USER32! 77d65ce2()
    CWnd::IsDialogMessageA(tagMSG * 0x005687b0 {msg=0x00000202 wp=0x00000000 lp=0x0011002a}) line 182
    CWnd:: PreTranslateInput(tagMSG * 0x005687b0 {msg=0x00000202 wp=0x00000000 lp=0x0011002a}) line 3424
    CPropertySheet:: PreTranslateMessage(tagMSG * 0x005687b0 {msg=0x00000202 wp=0x00000000 lp=0x0011002a}) line 691
    CWnd::WalkPreTranslateTree(HWND__ * 0x00140738, tagMSG * 0x005687b0 {msg=0x00000202 wp=0x00000000 lp=0x0011002a}) line 2667 + 18 bytes
    CWinThread:: PreTranslateMessage(tagMSG * 0x005687b0 {msg=0x00000202 wp=0x00000000 lp=0x0011002a}) line 665 + 18 bytes
    CWinThread:: PumpMessage() line 841 + 30 bytes
    CWnd::RunModalLoop(unsigned long 4) line 3478 + 19 bytes
    CPropertySheet:: DoModal() line 827 + 12 bytes
    CEtlDoc::OnConfigurationTraitementsAuto() line 901
    _AfxDispatchCmdMsg(CCmdTarget * 0x00928600 {CEtlDoc}, unsigned int 56043, int 0, void (void)* 0x004020a4 CEtlDoc::OnConfigurationTraitementsAuto(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88
    CCmdTarget::OnCmdMsg(unsigned int 56043, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 302 + 39 bytes
    CDocument::OnCmdMsg(unsigned int 56043, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 894 + 24 bytes
    CView::OnCmdMsg(unsigned int 56043, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 167 + 33 bytes
    CFrameWnd::OnCmdMsg(unsigned int 56043, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 890 + 33 bytes
    CWnd::OnCommand(unsigned int 56043, long 0) line 2088
    CFrameWnd::OnCommand(unsigned int 56043, long 0) line 317
    CWnd::OnWndMsg(unsigned int 273, unsigned int 56043, long 0, long * 0x0012fcc4) line 1597 + 28 bytes
    CWnd::WindowProc(unsigned int 273, unsigned int 56043, long 0) line 1585 + 30 bytes
    AfxCallWndProc(CWnd * 0x009282c0 {CETLSplitter hWnd=???}, HWND__ * 0x00140738, unsigned int 273, unsigned int 56043, long 0) line 215 + 26 bytes
    AfxWndProc(HWND__ * 0x00140738, unsigned int 273, unsigned int 56043, long 0) line 368
    AfxWndProcBase(HWND__ * 0x00140738, unsigned int 273, unsigned int 56043, long 0) line 220 + 21 bytes
    USER32! 77d48709()
    USER32! 77d487eb()
    USER32! 77d489a5()
    USER32! 77d4bccc()
    CWinThread:: PumpMessage() line 846
    CWinThread::Run() line 480 + 11 bytes
    CWinApp::Run() line 400
    AfxWinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141eff, int 1) line 49 + 11 bytes
    WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141eff, int 1) line 30
    WinMainCRTStartup() line 330 + 54 bytes
    KERNEL32! 7c816fd7()

  6. #6
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    en faite le crash vient du faite que hWnd que retourne la fonction FromHandle(m_hWnd) est NULL. dans quel cas peux-t-on avoir �a ?

    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
    CWnd* CWnd::GetDlgItem(int nID) const
    {
    	ASSERT(::IsWindow(m_hWnd));
    
    	if (m_pCtrlCont == NULL)
    		return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));
    	else
    		return m_pCtrlCont->GetDlgItem(nID);
    }
    
    void CWnd::GetDlgItem(int nID, HWND* phWnd) const
    {
    	ASSERT(::IsWindow(m_hWnd));
    	ASSERT(phWnd != NULL);
    
    	if (m_pCtrlCont == NULL)
    		*phWnd = ::GetDlgItem(m_hWnd, nID);
    	else
    		m_pCtrlCont->GetDlgItem(nID, phWnd);
    }

  7. #7
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par karim2009 Voir le message
    en faite le crash vient du faite que hWnd que retourne la fonction FromHandle(m_hWnd) est NULL. dans quel cas peux-t-on avoir �a ?
    Parceque m_hWnd est invalide. C'est en g�n�ral li� au fait que le contr�le n'a pas �t� cr�� dans la bo�te de dialogue.
    Si tu mets un GetLastError � la suite de ton GetDlgItem, qu'es-tu comme erreur?

    Enfin, peux-tu fournir toute la classe CDlgCalendrierDechargement et le .rc correspondant?

  8. #8
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    Citation Envoy� par 3DArchi Voir le message
    Parceque m_hWnd est invalide. C'est en g�n�ral li� au fait que le contr�le n'a pas �t� cr�� dans la bo�te de dialogue.
    Si tu mets un GetLastError � la suite de ton GetDlgItem, qu'es-tu comme erreur?
    ==>l'erreur qu'on re�oit avec GetLastError � la suite du GetDlgItem est �gal � 0.

    ci-joint les fichiers demand�s:la classe CDlgCalendrierDechargement et le .rc correspondant.
    Fichiers attach�s Fichiers attach�s

  9. #9
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Salut,
    Dans le zip, il manque le .h correspondant. Le .rc ne contient pas la d�finition de la bo�te de dialogue. C'est celui qui la contient qu'il me faudrait.
    A priori, je ne vois pas d'o� cela peut venir sans plus d'info.
    Pr�cisons, c'est lequel qui ne fonctionne pas ?GetDlgItem(IDC_MODIF_MENSUEL)->ShowWindow(TRUE); dans CDlgCalendrierDechargement::OnMensuel() ou dans CDlgCalendrierDechargement::CacheTousCtrl()?

  10. #10
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    Bonjour,
    je t'envoie les bonnes fichiers.

    c'est celui dans CDlgCalendrierDechargement::CacheTousCtrl()
    qui ne fonctionne pas car je crois que c'est lui qui est appel� en premier
    lieu durant OnInitDialog()
    GetDlgItem(IDC_MODIF_MENSUEL)->ShowWindow(FALSE)

    merci d'avance
    Fichiers attach�s Fichiers attach�s

  11. #11
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    A priori, je vois pas trop comme �a. Donc on va tenter d'autres pistes :
    -> Ta bo�te de dialogue est dans l'exe ou dans une DLL?
    -> As-tu v�rifier que tu n'avais pas de conflit d'ID : IDC_MODIF_MENSUEL est bien unique?
    -> Es-tu en configuration multi-thread? Le lancement de la bo�te de dialogue se fait-il dans le thread principal?
    J'avoue qu'en relisant le code, je ne vois pas trop pourquoi cela �choue

  12. #12
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    -> Ta bo�te de dialogue est dans l'exe ou dans une DLL?
    -dans un exe
    -> As-tu v�rifier que tu n'avais pas de conflit d'ID : IDC_MODIF_MENSUEL est bien unique?
    -oui,il est bien unique
    -> Es-tu en configuration multi-thread?
    -oui
    Le lancement de la bo�te de dialogue se fait-il dans le thread principal?
    - oui.

  13. #13
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    J'ai inject� le code que tu m'as fourni dans une coquille � moi. Et cela marche parfaitement. Donc, l�, je s�che. D�sol�. Pour moi, ce genre de probl�me est du � soit le contr�le n'est pas d�fini dans la bo�te de dialogue (ce qui n'est pas ton cas au vue du fichier ressources), soit cela peut �tre un probl�me du multithread (bo�te de dialogue cr��e dans un thread et DoModal dans un second) - ce qui d'apr�s ce que tu dis n'est pas le cas non plus. Donc, l�, je vois plus.
    Si ton projet n'est pas trop gros ni confidentiel, peut-�tre peux-tu le poster en entier.

  14. #14
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    -probl�me est du � soit le contr�le n'est pas d�fini dans la bo�te de dialogue
    ==> comment peux t on s'en assurer r�ellement?

    -soit cela peut �tre un probl�me du multithread (bo�te de dialogue cr��e dans un thread et DoModal dans un second)
    ==> si j'instancie pas de thread c'est que j'utilise le thread principal je suppose.


    -j'ai juste une remarque de plus sur la classe

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CWnd* CWnd::GetDlgItem(int nID) const
    {
    	ASSERT(::IsWindow(m_hWnd));
    
    	if (m_pCtrlCont == NULL)
    		return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));
    	else
    		return m_pCtrlCont->GetDlgItem(nID);
    }
    en premier lieu on a "m_pCtrlCont == NULL" donc on on devrait passer par
    ::GetDlgItem(m_hWnd, nID) puis le resultat sera passer comme argument
    � la m�thode CWnd::FromHandle()
    or ce n'est pas le cas,on passe directement par cette derni�re avec comme
    param�tre (HWND hWnd=NULL)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CWnd* PASCAL CWnd::FromHandle(HWND hWnd)
    ainsi on passe par :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CWnd* pWnd = (CWnd*)pMap->FromHandle(hWnd);
    qui nous renvoie vers la m�thode(avec h=NULL):

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    CObject* CHandleMap::FromHandle(HANDLE h)
    {
    	ASSERT(m_pClass != NULL);
    	ASSERT(m_nHandles == 1 || m_nHandles == 2);
    
    	if (h == NULL)
    		return NULL;
    ---
    }

    et �a retourne pointeur NULL sur lequel on essaye d'invoquer la m�thode:ShowWindow avec m_hWnd NULL.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    BOOL CWnd::ShowWindow(int nCmdShow)
    {
    	ASSERT(::IsWindow(m_hWnd));
    d'ou l'assertion.

    avez vous une id�e sur ce comportement?

  15. #15
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par karim2009 Voir le message
    -probl�me est du � soit le contr�le n'est pas d�fini dans la bo�te de dialogue
    ==> comment peux t on s'en assurer r�ellement?
    Si tu enl�ves le code qui plante, est-ce que ton contr�le s'affiche? Est ce qu'avec Spy++ tu peux voir si l'ID du contr�le est bien celui que tu penses?
    Citation Envoy� par karim2009 Voir le message
    -soit cela peut �tre un probl�me du multithread (bo�te de dialogue cr��e dans un thread et DoModal dans un second)
    ==> si j'instancie pas de thread c'est que j'utilise le thread principal je suppose.
    Oui.

    Citation Envoy� par karim2009 Voir le message
    -j'ai juste une remarque de plus sur la classe

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CWnd* CWnd::GetDlgItem(int nID) const
    {
    	ASSERT(::IsWindow(m_hWnd));
    
    	if (m_pCtrlCont == NULL)
    		return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));
    	else
    		return m_pCtrlCont->GetDlgItem(nID);
    }
    en premier lieu on a "m_pCtrlCont == NULL" donc on on devrait passer par
    ::GetDlgItem(m_hWnd, nID) puis le resultat sera passer comme argument
    � la m�thode CWnd::FromHandle()
    or ce n'est pas le cas,on passe directement par cette derni�re avec comme
    param�tre (HWND hWnd=NULL)
    Tu y passes probablement sauf que les sources n'�tant pas fourni, tu ne rentre pas dans la fonction. Si tu passes en assembleur et que tu fais tu pas � pas, tu verras que tu rentre bien dans une fonction. Mais, si comme moi, tu ne parles pas couramment l'assembleur, ce te sera de peu d'utilit�

    Citation Envoy� par karim2009 Voir le message
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CWnd* pWnd = (CWnd*)pMap->FromHandle(hWnd);
    Que vaut hWnd? NULL ou une valeur qui ressemble � quelque chose?
    Si c'est NULL, c'est bien que GetDlgItem(m_hWnd, nID) a �chou�. Donc le probl�me se situe bien au niveau de l'ID du contr�le.

  16. #16
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    -Si tu enl�ves le code qui plante, est-ce que ton contr�le s'affiche?

    si j'enl�ve les boutons la fen�tre s'affichera vide bien s�r.

    -Tu y passes probablement sauf que les sources n'�tant pas fourni, tu ne rentre pas dans la fonction. Si tu passes en assembleur et que tu fais tu pas � pas, tu verras que tu rentre bien dans une fonction. Mais, si comme moi, tu ne parles pas couramment l'assembleur, ce te sera de peu d'utilit�

    lorsqu'on debug nous ne rentrons pas assez dans les m�thodes du Visual C++?


    -Que vaut hWnd? NULL ou une valeur qui ressemble � quelque chose?
    Si c'est NULL, c'est bien que GetDlgItem(m_hWnd, nID) a �chou�. Donc le probl�me se situe bien au niveau de l'ID du contr�le.

    avant d'entrer dans la m�thode CWnd::GetDlgItem une valeur non NULL(0x001607f8) puis une fois on passe au test :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    if (m_pCtrlCont == NULL)
    		return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));
    �a devient NULL(0x00000000)

    Si c'est NULL, c'est bien que GetDlgItem(m_hWnd, nID) a �chou�. Donc le probl�me se situe bien au niveau de l'ID du contr�le.


    j'envoi un imprim� �cran qui montre bien �a.
    Fichiers attach�s Fichiers attach�s

  17. #17
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par karim2009 Voir le message
    si j'enl�ve les boutons la fen�tre s'affichera vide bien s�r.
    Je me suis mal exprim�. Il ne s'agit pas d'enlever les boutons de la fen�tre mais seulement le morceau de code o� tu fais GetDlgItem().

    Citation Envoy� par karim2009 Voir le message
    lorsqu'on debug nous ne rentrons pas assez dans les m�thodes du Visual C++?
    En g�n�ral, tu a le code des MFC, mais pas celui de Win32. Et comme au final, beaucoup d'appel des MFC se terminent par un appel sur Win32, tu ne peux rentrer dans ces fonctions.

    Dans, CDlgCalendrierDechargement::CacheTousCtrl(), remplace la ligne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    GetDlgItem(IDC_MODIF_MENSUEL)->ShowWindow(FALSE);
    par
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    HWND hControle = ::GetDlgItem(m_hWnd, IDC_MODIF_MENSUEL);
    Quelle est la valeur de hControle apr�s l'ex�cution de cette ligne ?

    [EDIT] Pour r�pondre, tu peux utiliser les balises [ QUOTE] et [/ QUOTE] pour reprendre ce qui est dit dans le fil pr�c�dent (sans l'espace entre [ et Q)

  18. #18
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    [EDIT]Il ne s'agit pas d'enlever les boutons de la fen�tre mais seulement le morceau de code o� tu fais GetDlgItem().
    [ QUOTE]==> �a crash lors de l'appel de GetDlgItem() avec axTrue. [/ QUOTE]

    [EDIT]En g�n�ral, tu a le code des MFC, mais pas celui de Win32. Et comme au final, beaucoup d'appel des MFC se terminent par un appel sur Win32, tu ne peux rentrer dans ces fonctions.

    [ QUOTE]==> OK,je te suis maintenant. [/ QUOTE]


    [EDIT]Dans, CDlgCalendrierDechargement::CacheTousCtrl(), remplace la ligne
    Code :

    GetDlgItem(IDC_MODIF_MENSUEL)->ShowWindow(FALSE);

    par
    Code :

    HWND hControle = ::GetDlgItem(m_hWnd, IDC_MODIF_MENSUEL);

    Quelle est la valeur de hControle apr�s l'ex�cution de cette ligne ?

    [ QUOTE]==>valeur NULL : 0x00000000 [/ QUOTE]

  19. #19
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Essaie le fichier attach� et dis-moi si ton contr�le s'affiche (la bo�te n'est pas fonctionnelle, mais devrait s'afficher).
    Fichiers attach�s Fichiers attach�s

  20. #20
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    18
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Par d�faut
    �a ne fait pas crasher la fen�tre mais la fen�tre s'affhiche vide sans comobox,bouton,libel�.
    juste avec les bouton:OK et CANCEL.
    Fichiers attach�s Fichiers attach�s

Discussions similaires

  1. [Struts] Null Pointer Exception
    Par n@n�u dans le forum Struts 1
    R�ponses: 1
    Dernier message: 01/08/2006, 13h10
  2. Null Pointer Exception
    Par snouppy dans le forum JBuilder
    R�ponses: 3
    Dernier message: 13/06/2006, 21h53
  3. Pointeur intelligent boost : return NULL ->comment faire?
    Par choinul dans le forum Biblioth�ques
    R�ponses: 7
    Dernier message: 21/12/2005, 16h24
  4. Null pointer assignement
    Par issou dans le forum C
    R�ponses: 12
    Dernier message: 18/11/2005, 13h39
  5. [Language]Constructeur==> Null pointer?
    Par Chiwawa dans le forum Langage
    R�ponses: 8
    Dernier message: 14/05/2005, 22h51

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