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

Langage C++ Discussion :

GetOpenFileName sur windows 7 x64


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut GetOpenFileName sur windows 7 x64
    Bonjour,

    ca fait deux jours que je me penche sur le problème de GetOpenFileName sous Visual Studio wundows 7 x64.


    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
     
    BOOL ShowOpenFileDlgImg(HWND hwnd, TCHAR *pstrFileName, TCHAR *pstrTitleName)
    {
    	TCHAR *szFilter		=  "JPEG Files (*.jpg)\0*.jpg\0PNG Files (*.png)\0*.png\0GIF Files (*.gif)\0*.gif\0BMP Files (*.bmp)\0*.bmp\0\0";
     
    	OPENFILENAME ofn; //	= { sizeof(ofn) };
     
    	ZeroMemory(&ofn, sizeof(OPENFILENAME));
        ofn.lStructSize = sizeof(OPENFILENAME);
     
    	ofn.hwndOwner		= hwnd;
    	ofn.hInstance		= GetModuleHandle(0);
    	ofn.lpstrFilter		= szFilter;
    	ofn.lpstrFile		= pstrFileName;
    	pstrFileName[0]='\0';
    	ofn.lpstrFileTitle	= pstrTitleName;
     
    	ofn.nFilterIndex	= 1;
    	ofn.nMaxFile		= _MAX_PATH;
    	ofn.nMaxFileTitle	= _MAX_FNAME + _MAX_EXT; 
     
    	// flags to control appearance of open-file dialog
    	ofn.Flags			=	OFN_EXPLORER			| 
    							OFN_ENABLESIZING		|	
    							OFN_PATHMUSTEXIST		|
    							OFN_FILEMUSTEXIST;
     
    	return GetOpenFileName(&ofn);
    }
    j'ouvre une boite de sélection de fichier images pour pouvoir l'afficher sur une fenetre mais j'ai tout essayé et ca ne fonctionne pas. en faisant des recherche j'ai pu constaté que beaucoup de gens avait se problème mais aucune solution n'est donné.

    si je code en dur le nom du fichier pstrFileName a l'aide d'un strcopy_s et que je commente tout le code, ca fonctionne.

    donc c'est bien au niveau de cette fonction, pourtant tout est bien codé.

    J'ai essayé de mettre hwndOwner a NULL, j'ai tenté ofn.lpstrFile[0]='\0'.

    Est ce que quelqu'un à déjà résolut ce problème ?

    Merci de votre aide.

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Quand tu dis que ça ne fonctionne pas, tu entends quoi par là ?
    En particulier, si GetOpenFilename() retourne zéro, tu es encouragé à appeler la fonction CommDlgExtendedError() pour avoir plus d'informations sur l'erreur rencontrée.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    en utilisant CommDlgExtendedError ca renvoi 0, le fichier est bien stockée dans la variable pstrFileName.

    quand j'ouvre la boite de dialogue, sur la sortie dans le débug j'ai:

    Exception de première chance à 0x75f1c41f (KernelBase.dll) dans monprog.exe*: 0x000006BA: Le serveur RPC n’est pas disponible.

    j'ai d'autres boites de dialogue qui permet de charger des fichiers .txt et ca fonctionne.

    Je confirme que ca viens bien de getopenfilename, si je le met en commentaire , je n'ai pas d'exception et la suite du programme fontionne parfaitement si je code en dur un nom de fichier.

    quand je dis que ca ne fonctionne pas, c'est qu'il ne se passe rien apres avoir sélectionné mon le fichier image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(ShowOpenFileDlgImg(hwnd, szFileName, szFileTitle))
    			{		
    				InitComboFilter();
    				DoOpenFileImage(hwnd, szFileName, szFileTitle);				
    			}
    Si je met en commentaire ShowOpenFileDlgImg, DoOpenFileImage affiche bien l'image, si je code en dur un nom de fichier au lien de la variable szFileName.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pour ton erreur de Debug, je vois deux pistes à explorer:
    • Désactiver le débogage RPC dans les options de Visual: Cette option cause des problèmes.
    • As-tu pensé à appeler CoInitialize() avant l'appel à GetOpenFileName()?

    Ensuite, simplifie ton appel un peu, pour réduire la liste des facteurs d'erreurs potentiels: Mets hInstance à NULL (il n'est pas nécessaire dans le cas présent, d'après la doc), ainsi que lpstrFileTitle (qui est optionnel).

    Poste aussi l'appel à la fonction.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    Je n'ai jamais utilisé la fonction CoInitialize avant un GetOpenFileName mais je vais me pencher la dessus, pour le paramètre au niveau du débogage, c'est dans les propriétés de Configuration et Debogage ? car je n'ai pas trouvé cette option.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Menu Tools -> Options -> Debugging -> Native -> Checkbox "Enable RPC Debugging" (je viens de vérifier sous Visual 2008).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Citation Envoyé par andromeda Voir le message
    j'ai d'autres boites de dialogue qui permet de charger des fichiers .txt et ca fonctionne.
    Cette phrase, et celle de Médinoc sur le fait qu'Explorer ne devrait pas nécessiter COINIT_MULTITHREADED, me laissent perplexe.
    Je sais que le topic est marqué comme résolu, mais j'ai juste une question :
    est-ce que la boîte de dialogue de tes fichiers txt s'ouvrent par défaut dans le même répertoire que celle qui permet de choisir des fichiers JPEGs ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    Oui en effet la boite de dialogue de sélection de fichier s'ouvre par défaut dans le même répertoire que celle qui permet de choisir des fichiers JPEGs l'inverse aussi.
    Je n'ai pas testé avec COINIT_APARTMENTTHREADED, devrais je utiliser ce paramètre?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par défaut
    ca ne fonctionne pas avec le paramètre COINIT_APARTMENTTHREADED, meme problème décrit sur mes posts précédents.

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

Discussions similaires

  1. php_interbase pour [php 5.3.5] VC6 x64 sur [Windows]
    Par guence dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 24/04/2011, 16h57
  2. [Oracle] Connexion PHP 5.2.5 / Oracle10 g sur Windows server2003 x64
    Par Sunchaser dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/10/2008, 15h40
  3. pb d'installation d'Oracle 9 sur windows 2000
    Par condor dans le forum Oracle
    Réponses: 1
    Dernier message: 14/12/2006, 11h40
  4. pb d'installation d'Oracle 9 sur windows 2000
    Par condor dans le forum Oracle
    Réponses: 1
    Dernier message: 14/06/2006, 14h28
  5. [Utilisation Postgresql sur windows]
    Par xhercule dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/01/2004, 18h36

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