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

VB 6 et antérieur Discussion :

[vb6] problème : mon programme se plante


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut [vb6] problème : mon programme se plante
    salut à tous ,
    mon programme se plante lorsque je choisi un fichier je sais pas pourquoi
    voilà mon code :
    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
     
    Private Sub Form_Load()
    Dim a As String
    Dim b As String
    With CommonDialog1
    .Filter = "*.exe | *.exe"
    .ShowOpen
    End With
    Open CommonDialog1.FileName For Binary As #1
    a = Space(LOF(1))
    Get #1, , a
    Close #1
    b = ""
    For i = 1 To Len(a)
    b = b & Mid(a, i, 1)
    Next i
    Open App.Path & "\n.exe" For Binary As #1
    Put #1, , b
    Close #1
     
    End Sub
    note: j'ai fai cette instruction juste pour savoir est ce que vb6 accepte de séparer les caractère ou non parce que aprés , j'en ai besoin pour les exploiter dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    b = ""
    For i = 1 To Len(a)
    b = b & Mid(a, i, 1)
    Next i
    merci d'avance

  2. #2
    Membre actif
    Inscrit en
    Janvier 2011
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 112
    Points : 209
    Points
    209
    Par défaut
    ___Ia ora na.
    ___J'ai testé votre programme et, hormis la nécessité de déclarer i :
    il a fonctionné sans erreur ni problème - aussi bien dans l'interface de VB que comme .exe.
    ___Peut-être quelques précisions sur son plantage seraient-elles utiles (un message d'erreur ? un numéro de ligne ? un environnement ?).
    NB- L'instruction App.Path se comporte différemment selon le mode d'exécution du programme.
    ___Bon courage pour la suite de votre travail.

  3. #3
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 165
    Points
    1 165
    Par défaut
    Citation Envoyé par sohaieb Voir le message
    mon programme se plante
    Sur quelle ligne en "degug pas à pas" ?
    Citation Envoyé par sohaieb
    Open CommonDialog1.FileName For Binary As #1
    Le fichier EXE fait quelle taille ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par XylonAkau Voir le message
    ___Ia ora na.
    ___J'ai testé votre programme et, hormis la nécessité de déclarer i :
    il a fonctionné sans erreur ni problème - aussi bien dans l'interface de VB que comme .exe.
    ___Peut-être quelques précisions sur son plantage seraient-elles utiles (un message d'erreur ? un numéro de ligne ? un environnement ?).
    NB- L'instruction App.Path se comporte différemment selon le mode d'exécution du programme.
    ___Bon courage pour la suite de votre travail.
    j'ai déja ajouter ça mais le problème existe encore

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par DAUDET78 Voir le message
    Sur quelle ligne en "degug pas à pas" ?
    Le fichier EXE fait quelle taille ?
    à propos , j'ai fait des breakpoint pour tester dans quelle ligne le programme se plante , j'ai trouvé que le problème est dans cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Len(a)
    b = b & Mid(a, i, 1)
    Next i
    et pour la taille de fichier , déja le fichier n'as pas pu ce crée..

  6. #6
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 165
    Points
    1 165
    Par défaut
    Citation Envoyé par sohaieb Voir le message
    j'ai trouvé que le problème est dans cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Len(a)
    b = b & Mid(a, i, 1)
    Next i
    Et où? dans quelle ligne? et Len(a) vaut combien ?
    et pour la taille de fichier , déja le fichier n'as pas pu ce crée..
    je parle du fichier EXE de départ que tu viens lire ..... pas de celui de sortie !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par DAUDET78 Voir le message
    Et où? dans quelle ligne? et Len(a) vaut combien ?
    je parle du fichier EXE de départ que tu viens lire ..... pas de celui de sortie !
    la ligne qui cause le plantage c'est b=b & mid ..
    et la taille de fichier d'entrer vaut 4.90 MO , et len(a) normalement vaut la taille totale de caractères dans le fichier d'entrer (qui est égale selon le bug à 5143504 )

  8. #8
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 165
    Points
    1 165
    Par défaut
    Citation Envoyé par sohaieb Voir le message
    et len(a) normalement vaut la taille totale de caractères dans le fichier d'entrer (qui est égale selon le bug à 5143504
    Mais il vaut combien exactement quand ça se plante ?
    Et quelle est la longueur de "b" ?
    Et quelle est la valeur de "i" ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par DAUDET78 Voir le message
    Mais il vaut combien exactement quand ça se plante ?
    Et quelle est la longueur de "b" ?
    Et quelle est la valeur de "i" ?
    quand je fait breakpoint sur cette instruction "b = b & Mid(a, i, 1)" il donne :

    b=""
    i=1

    et quand j'ai fait breakpoint sur l'instruction "next i" il me donne :

    b="MZ"
    i=2

    et dans le cas ou j'ai fait breakpoint sur "open app.path etc.." , là il se plante le programme ..

    Note: j'ai testé testé sur un programme qui a comme taille 24 KO , il a marché trés bien , mais avec ces 4 MO , il se plante .. je pense que c'est un problème de taille ou je sais pas nn?

  10. #10
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 165
    Points
    1 165
    Par défaut
    Citation Envoyé par sohaieb Voir le message
    et dans le cas ou j'ai fait breakpoint sur "open app.path etc.." , là il se plante le programme ..
    Il se plante? tu perds la main sur l'interface VB6 ou tu as une erreur d’exécution ?

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par DAUDET78 Voir le message
    Il se plante? tu perds la main sur l'interface VB6 ou tu as une erreur d’exécution ?
    oui je perd la main sur l'interface vb6 et je peux pas faire rien que CRLT +ALT + SUPPR pour faire Fin de tâche et fermer vb6 , j'ai laissé ça meme 15 min de chargement et rien n'est effectué

  12. #12
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 165
    Points
    1 165
    Par défaut
    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Len(a)
    b = b & Mid(a, i, 1)
    Next i
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 55000
    b = b & Mid(a, i, 1)
    Next i
    Ca marche ?
    teste alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 85000
    b = b & Mid(a, i, 1)
    Next i

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par DAUDET78 Voir le message
    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Len(a)
    b = b & Mid(a, i, 1)
    Next i
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 55000
    b = b & Mid(a, i, 1)
    Next i
    Ca marche ?
    teste alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 85000
    b = b & Mid(a, i, 1)
    Next i
    les deux marchent bien mais sans copier tous les bits de fichier que j'ai choisie déja

  14. #14
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 165
    Points
    1 165
    Par défaut
    Citation Envoyé par sohaieb Voir le message
    les deux marchent bien
    OK, donc ce n'est pas un problème de limite de la taille d'un string à 65536 caractères.
    mais sans copier tous les bits de fichier que j'ai choisie déja
    Les octets !
    Mais c'est normal

    Donc, à mon humble avis, c'est un problème de mémoire RAM disponible

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par DAUDET78 Voir le message
    OK, donc ce n'est pas un problème de limite de la taille d'un string à 65536 caractères. Les octets !
    Mais c'est normal

    Donc, à mon humble avis, c'est un problème de mémoire RAM disponible
    Ah bon? donc j'essai à augmenter la RAM utilisé (parce que je travaille sur VMbox) si j'ai rencontré le mem prob donc je vai vous informé

  16. #16
    Membre éprouvé Avatar de DAUDET78
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2008
    Messages
    635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 635
    Points : 1 165
    Points
    1 165
    Par défaut
    Pourquoi ça plante, c'est au delà de ma limite d’incompétence !

    Par contre, tu peux tourner la difficulté en utilisant un string "b" plus petit
    Tu traites les octet 1 à 50000 de "a" et tu mets le résultat dans "b" . tu enregistre "b" dans le fichier de sortie . tu fais "b"=""
    Tu traites les octet 50001 à 100000 de "a" et tu mets le résultat dans "b" . tu enregistre "b" dans le fichier de sortie . tu fais "b"=""
    etc etc etc etc
    Quand tu arrives à la fin de "a" , tu fermes le fichier de sortie

  17. #17
    Membre actif
    Inscrit en
    Janvier 2011
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 112
    Points : 209
    Points
    209
    Par défaut
    ___Ia ora na fa'ahou.
    1) La limite d'une chaîne VB6 est de 2^31, un peu plus de deux milliards d'octets ; c'est d'ailleurs aussi celle d'un entier long qui permet de travailler dessus (-2 147 483 648 à 2 147 483 647).
    2)
    (parce que je travaille sur VMbox)
    ___Si vous exécutez un programme dans une machine virtuelle, vous risquez en effet d'être confronté aux limites de mémoire de cette machine, indépendamment de VB (Daudet78 a donné la solution).
    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Len(a)
       b = b & Mid(a, i, 1)
    Next i
    ___L'instruction de la deuxième ligne oblige à recréer à chaque fois une nouvelle chaîne à partir de la précédente ; c'est sans conséquence pour des chaînes de taille réduite, mais devient très pénalisant avec des chaînes de plusieurs Mo ; il semble plus rapide à l'exécution de créer au départ une chaîne B de la longueur voulue (ici, len(A)) puis d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I& = 1 To Len(A$)
       Mid$(B$, I&, 1) = Mid$(A$, I&, 1)
    Next I&
    ___Je vous accorde que cette remarque est sans grand intérêt dans l'immédiat, puisque cette partie du programme est bidon, et queirait encore plus vite. Mais
    j'ai fai cette instruction juste pour savoir est ce que vb6 accepte de séparer les caractère ou non
    ___Sauf que ce codage rien que pour voir génère une occupation de la mémoire et des délais qui peuvent ne pas être anodins.
    ___Bonne poursuite de vos travaux.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par DAUDET78 Voir le message
    Pourquoi ça plante, c'est au delà de ma limite d’incompétence !

    Par contre, tu peux tourner la difficulté en utilisant un string "b" plus petit
    Tu traites les octet 1 à 50000 de "a" et tu mets le résultat dans "b" . tu enregistre "b" dans le fichier de sortie . tu fais "b"=""
    Tu traites les octet 50001 à 100000 de "a" et tu mets le résultat dans "b" . tu enregistre "b" dans le fichier de sortie . tu fais "b"=""
    etc etc etc etc
    Quand tu arrives à la fin de "a" , tu fermes le fichier de sortie
    j'ai meme utilisé tous ça en augmentant la taille de la RAM utilisé dans VMbox (puisuqe j'ai 8 GO de ram) mais j'ai eu le meme prob d'execution , en plus , j'ai vue que l'utilsation de CPU dans le gestionnaire de tache est de 100% ! c'est trop j crois

  19. #19
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par XylonAkau Voir le message
    ___Ia ora na fa'ahou.
    1) La limite d'une chaîne VB6 est de 2^31, un peu plus de deux milliards d'octets ; c'est d'ailleurs aussi celle d'un entier long qui permet de travailler dessus (-2 147 483 648 à 2 147 483 647).
    2)___Si vous exécutez un programme dans une machine virtuelle, vous risquez en effet d'être confronté aux limites de mémoire de cette machine, indépendamment de VB (Daudet78 a donné la solution).
    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Len(a)
       b = b & Mid(a, i, 1)
    Next i
    ___L'instruction de la deuxième ligne oblige à recréer à chaque fois une nouvelle chaîne à partir de la précédente ; c'est sans conséquence pour des chaînes de taille réduite, mais devient très pénalisant avec des chaînes de plusieurs Mo ; il semble plus rapide à l'exécution de créer au départ une chaîne B de la longueur voulue (ici, len(A)) puis d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I& = 1 To Len(A$)
       Mid$(B$, I&, 1) = Mid$(A$, I&, 1)
    Next I&
    ___Je vous accorde que cette remarque est sans grand intérêt dans l'immédiat, puisque cette partie du programme est bidon, et queirait encore plus vite. Mais
    ___Sauf que ce codage rien que pour voir génère une occupation de la mémoire et des délais qui peuvent ne pas être anodins.
    ___Bonne poursuite de vos travaux.
    merci pour votre aide , mais j'ai voulue savoir pourquoi on a utilisé les caractères $ et & avant et aprés les variable de cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I& = 1 To Len(A$)
       Mid$(B$, I&, 1) = Mid$(A$, I&, 1)
    Next I&
    enplus , j'ai voulue savoire séparer chaque caractère de la chaine car aprés je vai manipuler chaque caractère à coté , c'est pourquoi j'aime savoir faire tous ça mercii d'avance

  20. #20
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    j'ai utilisé encore cette instruction :

    For i = 1 To Len(a)
    Mid(b, i, 1) = Mid(a, i, 1)
    Next i

    il m'a afficher l'eurreur :
    "Run time error 5:
    invalid procedure call or argument"

    ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/01/2014, 02h16
  2. Réponses: 3
    Dernier message: 04/03/2013, 17h14
  3. Problème avec strcpy : mon programme plante
    Par Titi41 dans le forum Débuter
    Réponses: 4
    Dernier message: 06/11/2008, 12h02
  4. [VB6]problèmes pour executer mon projet en VB
    Par Walowalo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/04/2006, 19h27
  5. Réponses: 11
    Dernier message: 17/03/2003, 10h56

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