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 :

CDialog::DoModal() retourne -1


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut CDialog::DoModal() retourne -1
    Tout est dit. Ce n'est pas la première fois que j'utilise un CDialog, mais je me retrouve confronté à un problème bizarre: de manière totalement aléatoire (environ 10% des cas), avec le même cheminement d'actions qui mène à la création de la dialogue par le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CDlgTestWizard dlg;
    nResult = dlg.DoModal();
    je me retrouve avec un nResult = -1.
    Je vais donc voir la MSDN qui me dit:
    Citation Envoyé par MSDN
    The return value is –1 if the function could not create the dialog box, or IDABORT if some other error occurred, in which case the Output window will contain error information from GetLastError.
    L'explication à propos du -1 manque malheureusement.... J'ai pas essayé d'appeler le GetLastError, vu que je ne suis pas dans le cas du IDABORT renvoyé.
    Est-ce quelqu'un aurait déjà rencontré le problème, et peut-être l'explication du -1?

  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
    salut,
    tu as peut être un problème avec un contrôle .
    tu n'utilises pas d'activex par hasard ?
    regarde dans l'onglet debug trace si il n'y pas une indication.

  3. #3
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par farscape Voir le message
    tu n'utilises pas d'activex par hasard ?
    non
    Citation Envoyé par farscape Voir le message
    regarde dans l'onglet debug trace si il n'y pas une indication.
    quand j'ai re-rencontré le problème, je n'étais pas en debug donc je n'ai pas pu voir, mais j'ai ajouté un GetLastError au cas où, et celui-ci me renvoie 1812 (ERROR_RESOURCE_DATA_NOT_FOUND) dans le cas où DoModal renvoie -1.
    Citation Envoyé par MSDN
    1812 : The specified image file did not contain a resource section. (ERROR_RESOURCE_DATA_NOT_FOUND)
    OK j'ai une image dans la dialog problématique, mais cette image fait partie des ressources du projet. Sur la dialog, cette image est un CStatic avec IDB_WIZARD (identifiant de ma ressource image) dans son champ Image.

    Je vais réessayer de reproduire le problème en Debug, peut être que la fenêtre de trace me donnera des infos... (ou peut être pas!).

    Après recherches il semblerait que ce soit un problème de ressources et de AfxSetRessourceHandle. Je vérifie ça...

    EDIT: Problème avec la solution évoquée plus haut, ma ressource n'est pas dans une DLL à part du projet qui l'utilise.

  4. #4
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Question de la mort qui tue : pour une solution comprenant un seul projet qui contient du code et des ressources et génère un .exe, AfxGetResourceHandle doit-il retourner la même chose que AfxGetInstanceHandle? (il n'y a qu'un seul thread)

  5. #5
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Ok il semble donc que c'était bien cela. En effet, en temps normal AfxGetResourceHandle renvoie la même chose que AfxGetInstanceHandle, mais certaines fois, ces deux HANDLE diffèrent. Pourquoi, je ne sais pas, je vais chercher un peu maintenant que je sais ça.
    J'ai donc, dans le cas où ces deux HANDLE sont différents, forcé avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AfxSetResourceHandle(AfxGetInstanceHandle);
    et ma Dialog modale s'ouvre sans problème.

    Je marque en résolu, mais si quelqu'un a des remarques ou des idées sur cette perte de HANDLE, je suis prenneur...

  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
    salut,
    ça ne change pas tout seul...
    il doit trainer AfxSetResourceHandle quelque part.
    tu utilises un dll avec des ressources ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/10/2008, 14h32
  2. Réponses: 36
    Dernier message: 07/09/2007, 14h46
  3. Réponses: 23
    Dernier message: 08/02/2006, 09h15
  4. [MFC] CPropertySheet (ou CDialog)
    Par tut dans le forum MFC
    Réponses: 4
    Dernier message: 06/11/2002, 13h09
  5. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 14h16

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