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++

Vue hybride

karim2009 GetDlgItem return NULL pointer 19/01/2009, 12h12
3DArchi Bonjour et bienvenu,... 19/01/2009, 12h17
karim2009 S'agit-il du bon ID? ... 19/01/2009, 19h04
farscape salut, si GetDlgItem renvoi... 20/01/2009, 06h54
karim2009 salut, en faite c'est lors... 20/01/2009, 17h05
Message précédent Message précédent   Message suivant Message suivant
  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);
    }

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