none
problème d'utilisation de CFileDialog entre Vista et W7 RRS feed

  • Question

  • Le code suivant compilé avec VS2008 fonctionne sous VISTA et plante sous W7:

    CString strFilter;
    strFilter.LoadString(IDS_PDFFILE);
    strFilter += L" (*.pdf)|*.pdf||";
    CFileDialog dlg(FALSE, L"pdf", strDefaultName, OFN_ALLOWMULTISELECT  | OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, strFilter, this);

    en supprimant l'option OFN_ALLOWMULTISELECT  , tout fonctionne normalement.

    Existe-t-il une explication documentée?

     

     

    mardi 13 avril 2010 13:15

Réponses

  • Bonjour,

     

    Si aucune solution ne marche pas, vous pouvez signaler votre problème sur Microsoft Connect

    car il s’agit peut-être d’un problème ou d’une modification non documenté.

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    • Marqué comme réponse brflemm lundi 26 avril 2010 11:14
    mercredi 21 avril 2010 09:41

Toutes les réponses

  •  

    Bonjour,

     

    Quelles sont les messages d’erreur et quelle est l’instruction qui produit l’erreur ?

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/ff4910bf-dca4-4664-b01e-b58bd860a643

    mercredi 14 avril 2010 10:31
  • Il n'y a pas de code d'erreur. seulement un message qui indique que l'application va être arrêtée à cause d'une opération non conforme.

    L'instruction qui produit l'erreur : dlg.DoModal();

    avec le code décrit ci-dessus pour le constructeur, l'objectif est de sauvegarder un fichier (option FALSE), je crois comprendre que l'option  OFN_ALLOWMULTISELECT n'est pas cohérente avec cette fonctionnalité. mais est ce décrit quelque part dans la doc MSDN si oui à quel endroit, si non quelles sont les précautions à prendre, n'y a-t-il pas d'autres soucis latents de ce type?

     

    cordialement, merci de votre réponse.

     

    Bruno

    jeudi 15 avril 2010 17:51
  • Bonjour,

     

    Voici la page MSDN avec la documentation pour OPENFILENAMEhttp://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx

     

    Il n’y a aucune restriction pour les fenêtres modales. Un problème qui pourrait apparaitre pour OFN_ALLOWMULTISELECT est la taille de la mémoire tampon pour garder les fichiers sélectés.

     

    A part de code que vous aves présenté ici, vous n’avez rien ajouté a votre objet CFileDialog ?

    Il faut faire aussi une allocation de mémoire pour lpstrFile et nMaxFile.

     

     

    Vous pouvez consulter aussi les exemples de code pour ces discussions :

    http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/828d548e-2c9b-460f-8138-339e2d557878

    http://www.codeguru.com/forum/archive/index.php/t-346934.html

    http://www.codeguru.com/cpp/w-d/doc_view/misc/article.php/c6119/

    http://www.codeguru.com/forum/archive/index.php/t-424286.html

     

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/ff4910bf-dca4-4664-b01e-b58bd860a643
    • Marqué comme réponse Alex Petrescu mardi 20 avril 2010 08:00
    • Non marqué comme réponse Alex Petrescu mercredi 21 avril 2010 09:38
    vendredi 16 avril 2010 09:05
  • C'est un probleme connu sous Windows 7. Le fix est d'ajouter cette instruction dans OnInitDialog

    CoInitializeEx(NULL, COINIT_MULTITHREADED);

    Dans le OnClose tu release:

    CoUninitialize();
    • Marqué comme réponse Alex Petrescu mercredi 21 avril 2010 07:55
    • Non marqué comme réponse Alex Petrescu mercredi 21 avril 2010 09:38
    dimanche 18 avril 2010 20:34
  • Bonjour,

     

    Brflemm, est-ce que les informations présentées ici vous ont été utiles ?

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/ff4910bf-dca4-4664-b01e-b58bd860a643
    lundi 19 avril 2010 08:43
  • Bonjour,

    Je viens de revoir les solutions proposées:

    ConInitialize.... => cette solution ne convient pas à mon cas, je n'interveint pas dans le code OnInitdialog().

    4 liens proposés => aucune réponse, je construis la Boite De Dialogue avec l'option FALSE (enregistrement d'un fichier) et non TRUE (ouverture de fichiers).

    Le même code compilé avec VS2010 et testé sur W7 créé une assertion dans le source dlgfile.cpp à la ligne 479 :

     

     

     

    L478:  hr = (static_cast<IFileDialog*>(m_pIFileDialog))->SetOptions(dwFlags);

    L479:  ENSURE(SUCCEEDED(hr));

    Pour le moment, l'explication de l'option OFN_ALLOWMULTISELECT (que j'ai citée le 15 Avril) me convient, mon seul souci est d'être sur de ne rien omettre, mais à priori cela fonctionne dans mon cas.

    cordialement.

    mercredi 21 avril 2010 09:35
  • Bonjour,

     

    Si aucune solution ne marche pas, vous pouvez signaler votre problème sur Microsoft Connect

    car il s’agit peut-être d’un problème ou d’une modification non documenté.

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    • Marqué comme réponse brflemm lundi 26 avril 2010 11:14
    mercredi 21 avril 2010 09:41
  • Merci d'avoir essayer.

    cordialement.

    lundi 26 avril 2010 11:14