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 :

Comment remplire une CList ?


Sujet :

MFC

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut Comment remplire une CList ?
    Pour remplir la liste, pour l'instant j'ai fait un truc ;

    Voil�, dans MyProject.h je d�clare :
    typedef CList<CCamera*, CCamera*> CCameraList;

    et dans MyProject.cpp je cr�e la fonction suivante


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void CCamera::ListCamera(void)
    {     
       CCameraList m_camera;
     
        CCamera1* pCamera1 = new CCamera1;
        CCamera2* pCamera2= new CCamera2;  //etc...
     
       m_camera.AddHead(pCamera1);
       delete pCamera1;
       m_camera.AddHead(pCamera2);
       delete pCamera2;  //etc...
     
    }

    Au niveau syntaxe, c'est bon mais en tous cas on voit en mode debug que pos reste d�sesp�r�ment � 0x00000000 et donc on ne rentre jamais dans jamais la boucle while(pos) du code de GetConnectedCamera que voil� ci-dessous :

    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
    CCamera* CMyProjectDoc::GetConnectedCamera()
    {   
          POSITION  pos =  m_CCameraList.GetHeadPosition();
     
          while(pos)
          {
                CCamera* pCamera =  m_CCameraList.GetNext(pos);
                pCamera.Connect();
     
                if( pCamera.IsConnected() ) 
                     return pCamera;
           }
     
           return NULL;
    }

  2. #2
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 39
    Par d�faut
    ta list ne contient pas des objets cameras mais juste des pointeurs sur des objets ,donc quand tu delete ton pointeur a l'exterieur de la liste tu affectes aussi celui que tu as ajoute a ta liste
    Autre chose j'ai remarque que dans l'ajout tu utlises m_camera comme membre et quand tu veux acceder a ta liste tu utilises m_CCameraList est ce normal???

  3. #3
    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
    Citation Envoy� par Black_Daimond
    ta list ne contient pas des objets cameras mais juste des pointeurs sur des objets ,donc quand tu delete ton pointeur a l'exterieur de la liste tu affectes aussi celui que tu as ajoute a ta liste
    Autre chose j'ai remarque que dans l'ajout tu utlises m_camera comme membre et quand tu veux acceder a ta liste tu utilises m_CCameraList est ce normal???
    pas tout a fait , il detruit l'objet qu'il a stocker dans la list donc �a c'est mal ,
    mais la liste contient une adresse d'un objet detruit.
    la liste est vide pour les raisons indiqu�es par Black_Daimond.

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Citation Envoy� par Black_Daimond
    quand tu delete ton pointeur a l'exterieur de la liste tu affectes aussi celui que tu as ajoute a ta liste
    OK, j'ai enlev� les delete pCamera1 et delete pCamera2


    Citation Envoy� par Black_Daimond
    Autre chose j'ai remarque que dans l'ajout tu utlises m_camera comme membre et quand tu veux acceder a ta liste tu utilises m_CCameraList est ce normal???
    Heu...non, c'est une connerie que j'ai rectifi�e.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CCamera::ListCamera(void)
    {     
       CCameraList m_CCameraList;
     
        CCamera1* pCamera1 = new CCamera1;
        m_camera.AddHead(pCamera1);
     
        CCamera2* pCamera2= new CCamera2;  
        m_camera.AddHead(pCamera2); //etc...
     
    }

    Malheureusement, pos reste d�sesp�r�ment � 0x00000000

  5. #5
    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
    tu es sur de travailler avec la meme variable ?
    tu te malange pas les pinceaux avec des objets declar�s localement a la fonction (comme c'etait le cas dans ta fonction ListCamera) ?
    d'ailleurs emploi le prefixe m_ uniquement quand la variable est une donn�e membre de ta classe �a prete a confusion.


  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Ca se voit ou pas que je comprend rien � ce que je fais... (enfin je rame) :


    Cette fois je suis s�r de l'avoir appel� pareil.

    En revanche, est-ce que faire dans la fonction GetConnectedCamera() :
    CCamera::CCameraList m_CCameraList;
    permet bien d'aller chercher la variable de type CCameraList que j'ai remplie dans Camera.cpp

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Au fait, si j'�cris ma ligne
    POSITION pos = m_CCameraList.GetTailPosition();
    dans ma fonction ListCamera, je vois que � cet endroit, j'ai bien une valeur pour pos.

    m_CCameraList s'est donc "perdue en cours de route" et quand je veux l'utiliser dans la fonction GetConnectedCamera de CMyProjectDoc, c'est foutu!

  8. #8
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 39
    Par d�faut
    assures toi que tu ne detruits pas ta liste entre temps .
    sinon si c possible envoies le code de ta classe comme ca on pourra y jeter un coup d'oeil

  9. #9
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Comment a-t-elle pu se d�truire (j'ai rien demand� de la sorte moi �videmment).

    Lorsque j'effectue le debuggage pas � pas, le programme passe directement de la fonction ListCamera du fichier MyProject.cpp � la fonction GetConnectedCamera du fichier MyProjectDoc.cpp qui commence, je le rappelle par :

    CCamera::CCameraList m_CCameraList;
    POSITION pos = m_CCameraList.GetTailPosition();
    (***)

    R�sum� tr�s court : pos est connue � la fin de ListCamera [ce qu'on peut v�rifier avec la ligne de code (***)] mais ne l'est plus quand on passe � GetConnectedCamera.




    Ces 2 fonctions sont appel�es par InitInstance() :
    CCamera* pMyCamera = new CCamera;
    pMyCamera->ListCamera();
    CMyProjectDoc* pMyDoc = new CMyProjectDoc;
    pMyDoc->GetConnectedCam();
    delete pMyCamera;
    delete pMyDoc;

  10. #10
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 39
    Par d�faut
    Citation Envoy� par stof
    CCamera* pMyCamera = new CCamera;
    pMyCamera->ListCamera();
    CMyProjectDoc* pMyDoc = new CMyProjectDoc;
    pMyDoc->GetConnectedCam();
    delete pMyCamera;
    delete pMyDoc;
    Je vois le probleme mnt

    GetConnectedCam() est membre d'un nouveau CMyProjectDoc donc sa list est different de celle que tu as cr�e par new CCamera
    c'est pour cela qu'elle est vide

  11. #11
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Heum, oui certainement tr�s cher... mais comment je fais alors?

  12. #12
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    39
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 39
    Par d�faut
    je sais pa pourkoi tu crees un nouveau CMyProjectDoc
    mais si j'ai bien compris je te suggere de declarer dans la classe ou tu veux handler les methode de CCamera
    Comme ca tu as un seul objet CCamera tu peux en faire ce ke tu veux

  13. #13
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Je ne suis pas s�r qu'on se comprenne tr�s bien :

    Je ne cr�e pas une nouvelle classe xxxxxxDoc, celle dont je parle est celle qui est cr��e pour un projet MultiDocument (MDI).

    Si ce que tu veux dire par "nouveau document", c'est quand tu fais allusion aux lignes :
    CMyProjectDoc* pMyDoc = new CMyProjectDoc;
    pMyDoc->GetConnectedCam();


    j'ai pas d'autre solution pour aller chercher une fonction situ�e dans CMyProjectDoc � partir de CMyProjectApp

  14. #14
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Tu peux obtenir le document � partir du membre m_pMainWnd de l'objet Application

  15. #15
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Citation Envoy� par Gabrielly
    Tu peux obtenir le document � partir du membre m_pMainWnd de l'objet Application
    Ah, content de te revoir; c'est que je lutte un peu pour appliquer tes conseils de Vendredi. Du coup j'essaie d'arranger �a et en parall�le j'avance sur une ancienne version (mal programm�e).

    Bon alors je viens de regarder ce qu'on peut obtenir avec m_pMainWnd : plein de trucs mais j'ai pas vu la m�thode pour le document (pas de GetDocument comme on a dans View).

    Bref, le truc important qui me bloque, c'est que je "perde en route" ma variable m_CCameraList cr��e dans ListCamera() [Camera.cpp] quand je veux m'en servir dans GetConnectedCamera() [MyProjectDoc.cpp]

  16. #16
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Le convertir d'abord
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    CMainFrame* pFrame = static_cast<CMainFrame*>(m_pMainWnd);
    ensuite

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    CMyProjectDoc* pDoc = static_cast<CMyProjectDoc*>(pFrame->GetActiveDocument());
    Gabrielly

  17. #17
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Vu pour �a (faut le savoir! ); merci.

    Mais le fameux m_CCameraList est toujours inconnu dans GetConnectedCamera() et donc pos vaut toujours 0x00000000.

  18. #18
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    m_CCameraList est -il d�clarer dans le document :

  19. #19
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Est-ce que tu connais le nombre de cam�ras :

  20. #20
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    759
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 759
    Par d�faut
    Oui et non, comme tu l'avais fait : au d�but de GetConnectedCamera() en faisant :
    CCamera::CCameraList m_CCameraList;

    apr�s ta question, je l'ai mis en commentaire et je l'ai plut�t mis dans MyProjectDoc.h mais l�, une exception que j'ai recopi�e ci-dessous.

    Plus grave, je remet comme c'�tait juste avant et �a ne veut plus s'en aller!!!



    Exception non g�r�e � 0x784613b1 dans MyProject.exeoint d'arr�t utilisateur. (dans dbgrpt.c)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    #undef _CrtDbgBreak
     
    _CRTIMP void _cdecl _CrtDbgBreak(
            void
            )
    {
            DebugBreak();
    }
    Edit : non, je ne connais pas encore le nombre de cam�ra : je commence � cr�er les fonctions avec une premi�re (et son SDK) et quand j'aurai fini, j'attaquerai une deuxi�me, etc.

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. R�ponses: 2
    Dernier message: 11/05/2006, 22h21
  2. [VBA-E] Comment remplir une ComboBox ?
    Par yaya54 dans le forum Macros et VBA Excel
    R�ponses: 1
    Dernier message: 07/03/2006, 09h03
  3. comment remplir une table
    Par donny dans le forum Langage SQL
    R�ponses: 1
    Dernier message: 12/07/2005, 11h22
  4. erreur quand je veux remplir une CList :
    Par stof dans le forum MFC
    R�ponses: 10
    Dernier message: 03/02/2005, 16h18
  5. [SWT] Comment remplir une Table ?
    Par simon77 dans le forum SWT/JFace
    R�ponses: 1
    Dernier message: 23/08/2004, 10h31

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