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]Problème de boucle if


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut [MFC]Problème de boucle if
    Bonjour j'ai un problème avec le else de ma boucle de test: je teste l'existence d'une clef dans le registre Windows, si celle ci n'existe pas je la crée en l'ouvrant (puisque lorsque on essaye d'ouvrir une clef qui n'existe pas elle est crée par défaut):

    Uilisation des bobliothèques suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include "Registry.h"
    #include "RegEntry.h"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for(i=0;i<m_ListMonday.size();i++)
    	{	if ( CRegistry :: KeyExists( "Software\\Workshift editor", HKEY_LOCAL_MACHINE )) 
    	//la clef existe on ne fait rien
     
    		else 
    			//la clef n'existe pas on la crée
    			RegMyReg.Open( "Software\\Workshift editor", HKEY_LOCAL_MACHINE );
     
     
    	}
    L'erreur est la suivante:
    C:\activeX\Workshift\WorkshiftPpg.cpp(300) : error C2181: illegal else without matching if
    Je change donc mon code et encadre les statements par des {} :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for(i=0;i<m_ListMonday.size();i++)
    	{	if ( CRegistry :: KeyExists( "Software\\Workshift editor", HKEY_LOCAL_MACHINE )) {
    	    //la clef existe on ne fait rien
     
    	} else {
    			//la clef n'existe pas on la crée
    		RegMyReg.Open( "Software\\Workshift editor", HKEY_LOCAL_MACHINE ); }
     
     
    	}
    et j'obtiens cette fois-ci 5 erreurs !!!
    WorkshiftPpg.obj : error LNK2001: unresolved external symbol "public: bool __thiscall CRegistry::Open(char const *,struct HKEY__ *,unsigned long,bool)" (?Open@CRegistry@@QAE_NPBDPAUHKEY__@@K_N@Z)

    WorkshiftPpg.obj : error LNK2001: unresolved external symbol "public: static bool __cdecl CRegistry::KeyExists(char const *,struct HKEY__ *)" (?KeyExists@CRegistry@@SA_NPBDPAUHKEY__@@@Z)

    WorkshiftPpg.obj : error LNK2001: unresolved external symbol "public: __thiscall CRegistry::CRegistry(unsigned long)" (??0CRegistry@@QAE@K@Z)

    WorkshiftPpg.obj : error LNK2001: unresolved external symbol "public: void __thiscall CRegistry::Close(void)" (?Close@CRegistry@@QAEXXZ)

    Debug/Workshift.ocx : fatal error LNK1120: 4 unresolved externals
    Error executing link.exe.
    Merci pour votre aide !!

  2. #2
    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
    verifie que tu as bien implementé les fonctions en question
    ou que le signature de l'implemention correspond bien a celle definit dans la classe.
    autre chose CRegistry :: KeyExists est une fonction static ?
    si c'est le cas static est bien present dans la classe ?

  3. #3
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    Citation Envoyé par farscape
    CRegistry :: KeyExists est une fonction static ?
    si c'est le cas static est bien present dans la classe ?
    Voila ce que j'ai dans ma classe pour cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class CRegistry {
    public:
    //......
    static bool	KeyExists(LPCTSTR lpszRegPath, HKEY hRootKey = HKEY_LOCAL_MACHINE);
    	bool		SubKeyExists(LPCTSTR lpszSub);
    //....
    protected:
    //....
    Donc oui elle est static et oui elle est déclarée!

  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
    ok tu as fais l'implementation de la fonction ?

  5. #5
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    L'implémentation?? Qu'est ce que ça veut dire?
    Tu veux dire en passant par MFC ClassWizard?
    Dans cce cas non. J'ai juste importé mon Registry.h et c'est tout!

  6. #6
    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
    la partie dans le .cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     bool  CRegistry:: KeyExists(LPCTSTR lpszRegPath, HKEY hRootKey/* = HKEY_LOCAL_MACHINE*/)
    {
    // ton code
    }

  7. #7
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    Mais mon code fait partie de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void CWorkshiftPropPage::OnSave()
    { //ma fonction
    }
    qui est associée à un bouton.
    Est-ce que je mets toute ma fonction dans le code de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool  CRegistry:: KeyExists(LPCTSTR lpszRegPath, HKEY hRootKey/* = HKEY_LOCAL_MACHINE*/) 
    { 
    // ton code 
    }
    ou est ce que je rajoute juste cette portion de code en haut avec les déclarations?

  8. #8
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    Ma classe avec ma fonction ressemble à ceci:
    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
    Begin CRegistry Class Definition
     * ==================================== */
     
    using namespace std;
     
    class CRegistry {
     
    public:
     
    	CRegistry	(DWORD flags = CREG_CREATE);	
    	virtual		~CRegistry() { Close(); for (int i=0; i < _reEntries.size(); ++i) delete _reEntries[i]; delete [] _lpszSubKey; }
     
    	CRegEntry&	operator[](LPCTSTR lpszVName);
    	CRegEntry*	GetAt(size_t n) { assert(n < Count());  return _reEntries.at(n); }
     
    	bool		Open(LPCTSTR lpszRegPath, HKEY hRootKey = HKEY_LOCAL_MACHINE,
    				DWORD dwAccess = KEY_QUERY_VALUE | KEY_SET_VALUE, bool bAuto = false);
     
    	bool		AutoOpen(DWORD dwAccess);
    	void		AutoClose();
    	void		Close();
    	bool		Refresh();	
     
    	static bool	KeyExists(LPCTSTR lpszRegPath, HKEY hRootKey = HKEY_LOCAL_MACHINE);
    	bool		SubKeyExists(LPCTSTR lpszSub);	
     
    	void		DeleteKey();	
     
    	__inline	GetFlags()	{	return __dwFlags; }
    	__inline	Count()		{	return _reEntries.size(); }
     
    	HKEY		hKey;		/* Registry key handle */
     
    protected:
     
    	DWORD		__dwFlags;
    	friend		void CRegEntry::MultiSetAt(size_t nIndex, LPCTSTR lpszVal);
    	friend		void CRegEntry::MultiRemoveAt(size_t nIndex);
     
    private:
     
    	void		InitData();	
    	void		DeleteKey(HKEY hPrimaryKey, LPCTSTR lpszSubKey);
     
    	HKEY		_hRootKey;
    	LPTSTR		_lpszSubKey;
     
    	std::vector<CRegEntry *> _reEntries;
    };
    Je ne comprends pas très bien pourquoi tu me dis de mettre mon code dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     bool  CRegistry:: KeyExists(LPCTSTR lpszRegPath, HKEY hRootKey/* = HKEY_LOCAL_MACHINE*/) 
    { 
    // ton code 
    }

  9. #9
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    Ok je crois que je t'ai répondu n'importe quoi!
    J'ai importé 3 fichiers qui me permette d'utiliser les fonctions de la class CRegistry:
    RegEntry.h
    Registry.h
    Registry.cpp

    Dans mon .cpp j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool CRegistry::KeyExists(LPCTSTR lpszRegPath, HKEY hRootKey) {
     
    	CRegistry cregTemp( NULL );
    	return cregTemp.Open(lpszRegPath, hRootKey, KEY_QUERY_VALUE, true);	
    }
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class CRegistry { 
    public: 
    //...... 
    static bool   KeyExists(LPCTSTR lpszRegPath, HKEY hRootKey = HKEY_LOCAL_MACHINE); 
       bool      SubKeyExists(LPCTSTR lpszSub); 
    //.... 
    protected: 
    //....
    Cette dernière partie de code est ce que j'avais dans mon .h !!
    Est ce que ça te permet d'y voir plus clair?

  10. #10
    Membre confirmé Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par défaut
    D'accord, je comence à comprendre...
    Merci pour ton aide en tout cas!

Discussions similaires

  1. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31
  2. Réponses: 3
    Dernier message: 05/05/2004, 10h23
  3. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17
  4. [MFC] Problème de pointeur !!
    Par acastor dans le forum MFC
    Réponses: 7
    Dernier message: 19/03/2004, 15h50
  5. [MFC] problème d'éxécution
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 15/03/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