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 :

probleme avec FINDREPLACE


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 probleme avec FINDREPLACE
    Bonjour,

    J'essaye depuis deux jours d'afficher la boite de dialog find de windows, lorsque que la boite de dialog s'affiche, j'ai plein d'exception qui s'affiche dans le debug de visual studio et
    mon application bloque.

    Je suis sur Windows 7 x64, j'utilise Visual studio 2013.

    Le code est le suivant:
    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
     
           FINDREPLACE _fdlg;
     
           TCHAR _FindWhat[128];
     
           generic_strcpy(FindWhat, 128, TEXT("test"));
     
           ZeroMemory(&_fdlg, sizeof(_fdlg));
    	_fdlg.lStructSize = sizeof(_fdlg);
    	if (_winVersion < WV_W2K)
    		_fdlg.lStructSize = sizeof(FINDREPLACE);
    	_fdlg.hwndOwner = hwnd;
    	_fdlg.hInstance = NULL;
    	_fdlg.Flags = 0;;
    	_fdlg.lpfnHook = NULL;
    	_fdlg.lCustData = 0;
    	_fdlg.lpTemplateName = NULL;
     
            _fdlg.lpstrFindWhat = (TCHAR *)_FindWhat;
    	_fdlg.wFindWhatLen = generic_strlen(_FindWhat);
     
    	return FindText(&_fdlg);
    Les message d'erreurs sont les suivants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    First-chance exception at 0x00000001 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000001.
    First-chance exception at 0x00000001 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000001.
    First-chance exception at 0x75DF4B0E (shell32.dll) in demoapp.exe: 0xC0000005: Access violation writing location 0x760153F8.
    First-chance exception at 0x00000011 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000011.
    First-chance exception at 0x00000001 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000001.
    First-chance exception at 0x00000001 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000001.
    First-chance exception at 0x75DF4B0E (shell32.dll) in demoapp.exe: 0xC0000005: Access violation writing location 0x760153F8.
    First-chance exception at 0x00000011 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000011.
    First-chance exception at 0x00000001 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000001.
    First-chance exception at 0x00000001 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000001.
    First-chance exception at 0x00000000 in demoapp.exe: 0xC0000005: Access violation executing location 0x00000000.
    First-chance exception at 0x76EAA964 (comdlg32.dll) in demoapp.exe: 0xC0000005: Access violation writing location 0x00340FFC.
    J'ai essayé de modifier les paramètres de la structure FINDREPLACE mais ca ne donne rien.

    avez vous une idée?

    Merci de votre aide.

  2. #2
    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
    Le code minimum suivant devrait au moins afficher la boite de dialog Find. Quelqu'un pourrait le tester ?

    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
     
    FINDREPLACE _fdlg;
    	HWND hDlg;
    	TCHAR _FindWhat[80];
    	hDlg = NULL;
    	memset(_FindWhat, 0, 80);
     
    	ZeroMemory(&_fdlg, sizeof(_fdlg));
    	_fdlg.lStructSize = sizeof(_fdlg);
    	//if (_winVersion < WV_W2K)
    	//	_fdlg.lStructSize = sizeof(FINDREPLACE);
    	_fdlg.hwndOwner = _hSelf;
    	_fdlg.hInstance = NULL;
    	_fdlg.Flags = 0;
    	_fdlg.lpfnHook = NULL;
    	_fdlg.lCustData = 0;
    	_fdlg.lpTemplateName = NULL;
    	_fdlg.lpfnHook = NULL;
    	_fdlg.lpstrFindWhat = _FindWhat;
    	_fdlg.wFindWhatLen = 80;
    	_fdlg.lpstrReplaceWith = NULL;
    	_fdlg.wReplaceWithLen = 0;
     
    	hDlg = FindText(&_fdlg);
    Merci de votre aide.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    Il dit quoi le débuggeur ?

  4. #4
    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
    Ben j'obtiens que des access violation, sinon j'ai pris ce code et je l'ai mis dans une autre application et j'ai le message ci desssous, peut une incompatibilité avec windows 64
    ou bien un parametre du compilateur qui n'est pas positionné ou il manque une lib ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    First-chance exception at 0x777A335A (ntdll.dll) in chatlog.exe: 0xC0000264:  L’application a essayé de libérer une ressource dont elle n’était pas propriétaire. Cliquez sur OK pour arrêter l’application.
    a moins que j'ai mal rempli la structure FINDREPLACE, mais je ne voit pas d'ou le probleme viens. il suffirait de faire un copier coller du code et que quelqu'un le test.

    Ou bien, faut-il utilisé imperativement "RegisterWindowMessageW" pour que que ca fonctionne ?

  5. #5
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Bonjour,

    Trouvé sur le site de microsoft :

    To display a Find dialog box, first initialize a FINDREPLACE structure and then call the FindText function. Note that the FINDREPLACE structure and the buffer for the search string should be a global or static variable so that it does not go out of scope before the dialog box closes.
    En clair l'objet doit exister aussi longtemps que ta boite de dialogue. Ce qui n'est pas le cas de ton code qui utilise une variable locale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return FindText(&_fdlg);

    Cordialement

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    En effet, la boite de dialogue créée par FindText() n'est pas modale (contrairement aux autres Common Dialogs comme GetOpenFileName()).
    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 é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
    1000 merci à vous, ca fonctionne, la boite find s'affiche et je n'ai plus d'access violation et de plantage.

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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