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 :

Fonction GetLastError()


Sujet :

MFC

  1. #1
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut Fonction GetLastError()
    Bonjour à tous.

    J'aimerai comprendre comment elle fonctionne cette fonction.

    En effet je l'utilise afin de m'assurer qu'une seule instance de mon application est en cours en une fois. Mais eulement l'erreur affichée me fait état de l'impossibilité à lire un emplacement. je veux dire un problème de mémoire.

    Est il possible de la personnaliser pour afficher un joli message?

    Merci pour vos contributions.

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077

  3. #3
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Citation Envoyé par bigboomshakala
    Mon véritable problème est de personnaliser le message à renvoyer à l'utilisateur.

    J'ai suivi le post de BertrandA via ce post.

    Il marche bien sauf que je veux personnaliser le message.
    http://www.developpez.net/forums/viewtopic.php?t=305175

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Personnaliser le message ? "Le programme est déjà en cours d'exécution" ça suffit pas comme message :

  5. #5
    Membre expérimenté Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Par défaut
    Je ne vois pas trop où est le problème : GetLastError() retourne uniquement un code d'erreur. Tu affiches bien ce que tu veux après :

    J'ai suivi le post de BertrandA via ce post.
    Ca y est, ça va encore être de ma faute ...

  6. #6
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Personnaliser le message ? "Le programme est déjà en cours d'exécution" ça suffit pas comme message :
    Il m'affiche pas quelque chose d'aussi joli mais plutôt une fenêtre d'erreur pas très compréhensible pour un utilisateur profane. Ce message n'est pas du tout convivial. je suppose qu'il est possible de l'embellir.

    Merci

  7. #7
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Citation Envoyé par BertrandA
    Je ne vois pas trop où est le problème : GetLastError() retourne uniquement un code d'erreur. Tu affiches bien ce que tu veux après :

    J'ai suivi le post de BertrandA via ce post.
    Ca y est, ça va encore être de ma faute ...
    je ne voulais vraiment pas t'incriminer; tu m'en vois désolée.

    Le problème est que GetLastError() retourne un DWORD et je n'arrive pas y mettre autre chose.

    STP si tu as un exemple comme ce que je te demande partage le avec moi.

    Merci beaucoup

  8. #8
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par annedjomo
    Il m'affiche pas quelque chose d'aussi joli mais plutôt une fenêtre d'erreur pas très compréhensible pour un utilisateur profane. Ce message n'est pas du tout convivial. je suppose qu'il est possible de l'embellir.

    Merci
    Ben mieux que ça : il affiche ce que tu lui demande. A toi de changer le message par ce que tu veux

  9. #9
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Voici les fonctions en question
    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
    protected:
      DWORD  m_dwLastError;
      HANDLE m_hMutex;
     
    CLimitSingleInstance(TCHAR *strMutexName)
      {
        //Make sure that you use a name that is unique for this application otherwise
        //two apps may think they are the same if they are using same name for
        //3rd parm to CreateMutex
        m_hMutex = CreateMutex(NULL, FALSE, strMutexName); //do early
        m_dwLastError = GetLastError(); //save for use later...
      }
     
    BOOL IsAnotherInstanceRunning()
      {
        return (ERROR_ALREADY_EXISTS == m_dwLastError);
      }
    Je ne sais à quel niveau est ce que je dois changer le message

    Merci

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Y'a pas de message affiché ici. Tu dois avoir un problème dans ton code. Quel est le message affiché ?

  11. #11
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    L'instruction à "0x004406a9" emploie l'adresse mémoire "0x00000004". La memoire ne peut pas être "read".
    Cela survient lorsque je tente de lancer une seconde instance alors qu'une autre est déjà en cours

    Merci

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Ben c'est un plantage de ton programme tout simplement. Execute au debugger pour touver l'endroit du plantage.

  13. #13
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Ben c'est un plantage de ton programme tout simplement. Execute au debugger pour touver l'endroit du plantage.
    Il s'arrête sur la première ligne de cette fonction ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int MonProjetApp::ExitInstance()
    {
    	// TODO : ajoutez ici votre code spécialisé et/ou l'appel de la classe de base
    	if (MaConnexion->IsOpen())
    		MaConnexion->Close();
    	return CWinApp::ExitInstance();
     
    }
    Dans le point h j'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public:
    	CDatabase* MaConnexion;
    Merci de votre aide.

  14. #14
    Membre expérimenté Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Par défaut
    Le pointeur MaConnexion n'est pas initialisé.
    Tu rajoutes simplement une initialisation dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonProjetApp::MonProjetApp() : MaConnexion(NULL)
    et un test dans ExitInstance() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // TODO : ajoutez ici votre code spécialisé et/ou l'appel de la classe de base
       if (MaConnexion != NULL) 
          if (MaConnexion->IsOpen()) 
            MaConnexion->Close();

  15. #15
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Merci à vous tous.

    J'ai déplacé l'initialisation de MaConnexion pour la mettre avant le test de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (g_SingleInstanceObj.IsAnotherInstanceRunning())
           return FALSE;
    Et le problème est résolu.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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